函数参数传值
参数的几种传递方式可以混合定义和混合调用。但在过程中要小心前后顺序。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字
包裹和解包裹并不是相反操作,而是两个相对独立的过程
a.按位置一一传递 f(1,2,3) //a,b,c
b. 关键字(keyword)参数传递
有时候,我们发现,在写程序时用位置传递会感觉比较死板。关键字传递就是根据每个参数的名字传递值,而不用遵守固定的位置。依然沿用上面f的定义,更改调用方式:
f(c=3,b=2,a=1)
关键字传递可以和位置传递混用,但位置传递的参数必须在关键字传递的参数之前。
f(1,c=3,b=2)
c. 参数默认值(default)
在定义函数的时候,使用形如a=19的方式,可以给参数赋予默认值。如果该参数最终没有被传递值,将使用该默认值。
def f(a,b,c=10): print a,b,c f(3,2)
f(3,2,1)
d.包裹位置传递与包裹关键字传递
区别在于 一个是元组,一个是字典;均可用于不确定参数个数以及不确定key-value
def func(*name):
... print type(name)
... print name
...
>>> func(1,4,6)
<type 'tuple'>
(1, 4, 6)
>>> func(1,4,6,5,6)
<type 'tuple'>
(1, 4, 6, 5, 6)
>>> def func(**dict):
... print type(dict)
... print dict
...
>>>
>>> func(a=1, b=9)
<type 'dict'>
{'a': 1, 'b': 9}
>>>
... print type(name)
... print name
...
>>> func(1,4,6)
<type 'tuple'>
(1, 4, 6)
>>> func(1,4,6,5,6)
<type 'tuple'>
(1, 4, 6, 5, 6)
>>> def func(**dict):
... print type(dict)
... print dict
...
>>>
>>> func(a=1, b=9)
<type 'dict'>
{'a': 1, 'b': 9}
>>>
e.解包裹
def func(a,b,c):
... print a, b, c
...
>>> args = (1,3,4)
>>> func(*args)
1 3 4
>>> dict = {'a':1, 'b':2, 'c':3}
>>> func(**dict)
1 2 3
>>>
... print a, b, c
...
>>> args = (1,3,4)
>>> func(*args)
1 3 4
>>> dict = {'a':1, 'b':2, 'c':3}
>>> func(**dict)
1 2 3
>>>