上一篇文章為:→3.4.12函數(shù)返回值(二)
函數(shù)參數(shù)(二)
1. 缺省參數(shù)
調(diào)用函數(shù)時策添,缺省參數(shù)的值如果沒有傳入澈段,則被認(rèn)為是默認(rèn)值。下例會打印默認(rèn)的age舰攒,如果age沒有被傳入:
def printinfo( name, age = 35 ):
# 打印任何傳入的字符串
print "Name: ", name
print "Age ", age
# 調(diào)用printinfo函數(shù)
printinfo(name="miki" )
printinfo( age=9,name="miki" )
以上實例輸出結(jié)果:
Name: miki
Age 35
Name: miki
Age 9
注意:帶有默認(rèn)值的參數(shù)一定要位于參數(shù)列表的最后面败富。
>>> def printinfo(name, age=35, sex):
... print name
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
2.不定長參數(shù)
有時可能需要一個函數(shù)能處理比當(dāng)初聲明時更多的參數(shù)。這些參數(shù)叫做不定長參數(shù)摩窃,聲明時不會命名兽叮。
基本語法如下:
def functionname([formal_args,] *args, **kwargs):
"函數(shù)_文檔字符串"
function_suite
return [expression]
加了星號()的變量args會存放所有未命名的變量參數(shù),args為元組猾愿;而加*的變量kwargs會存放命名參數(shù)鹦聪,即形如key=value的參數(shù), kwargs為字典蒂秘。
>>> def fun(a, b, *args, **kwargs):
... """可變參數(shù)演示示例"""
... print "a =", a
... print "b =", b
... print "args =", args
... print "kwargs: "
... for key, value in kwargs.items():
... print key, "=", value
...
>>> fun(1, 2, 3, 4, 5, m=6, n=7, p=8) # 注意傳遞的參數(shù)對應(yīng)
a = 1
b = 2
args = (3, 4, 5)
kwargs:
p = 8
m = 6
n = 7
>>>
>>>
>>>
>>> c = (3, 4, 5)
>>> d = {"m":6, "n":7, "p":8}
>>> fun(1, 2, *c, **d) # 注意元組與字典的傳參方式
a = 1
b = 2
args = (3, 4, 5)
kwargs:
p = 8
m = 6
n = 7
>>>
>>>
>>>
>>> fun(1, 2, c, d) # 注意不加星號與上面的區(qū)別
a = 1
b = 2
args = ((3, 4, 5), {'p': 8, 'm': 6, 'n': 7})
kwargs:
>>>
>>>
3. 引用傳參
- 可變類型與不可變類型的變量分別作為函數(shù)參數(shù)時泽本,會有什么不同嗎?
- Python有沒有類似C語言中的指針傳參呢姻僧?
>>> def selfAdd(a):
... """自增"""
... a += a
...
>>> a_int = 1
>>> a_int
1
>>> selfAdd(a_int)
>>> a_int
1
>>> a_list = [1, 2]
>>> a_list
[1, 2]
>>> selfAdd(a_list)
>>> a_list
[1, 2, 1, 2]
Python中函數(shù)參數(shù)是引用傳遞(注意不是值傳遞)规丽。對于不可變類型,因變量不能修改撇贺,所以運(yùn)算不會影響到變量自身赌莺;而對于可變類型來說,函數(shù)體中的運(yùn)算有可能會更改傳入的參數(shù)變量松嘶。
想一想為什么
>>> def selfAdd(a):
... """自增"""
... a = a + a # 我們更改了函數(shù)體的這句話
...
>>> a_int = 1
>>> a_int
1
>>> selfAdd(a_int)
>>> a_int
1
>>> a_list = [1, 2]
>>> a_list
[1, 2]
>>> selfAdd(a_list)
>>> a_list
[1, 2] # 想一想為什么沒有變呢艘狭?