在之前的python学习笔记系列博客中,我已经描述过关于python中最简单的函数参数传递,根据参数位置传递。这里就不再赘述了,若想了解位置传递,请链接http://blog.csdn.net/u012990533/article/details/44198209
Python中函数的几种参数传递的方法:
1. 关键字传递
这种传递方式是根据参数的名字进行传递,不需要遵守位置的对应。举例如下:
def sum(a,b)
print a + b
sum(b = 1, a = 2)
关键字传递和位置传递可混用,但位置参数一定要出现在关键字参数之前。
sum(2,b = 1)
2. 参数默认值传递
定义函数的时候,可以给参数默认值,若该参数没有被传递值,就会使用设置的默认值。举例如下:
def sum(a,b = 1)
print a + b
sum(1)
sum(1,2)
说明:第一次调用sum函数时,由于只传递了一个参数,b将使用默认值1。第二次调用sum函数时,传递的与函数定义的参数个数相等,b将使用2。
3. 包裹(packing)传递
定义函数的时候,有时候不知道调用函数时传递多少参数,因此,现在要介绍用包裹位置参数和包裹关键字参数的方法来进行参数传递就非常方便了。
包裹位置传递举例如下:
def f(*num):
print type(num)
print num
f(1,2,3)
f(1,3,5,7,)
说明:两次调用f函数,可见,函数定义相同但参数个数不同,细心的读者会注意到,f函数的参数是*num,加上*就代表所有的参数会被num收集,之后根据位置组成一个元组(tuple),num就是元组名,这样的参数形式就称作包裹位置传递参数。
包裹位置传递举例如下:
def f(**num):
print type(num)
print num
f(a = 1, b = 1,c = 1)
f(x = 2, y = 2)
说明:此时,num将代表一个词典,会收集所有的关键字,传递给f函数,参数num是包裹关键字传递的词典,参数num必须加上两个**,num就是词典名。
非常重要:区分包裹传递是位置传递还是关键字传递的方法就在于定义函数时在相应的元组名或词典名前加*或**。
4. 解包裹(unpacking)
Unpacking就是就是在传递tuple或dictionary的时候,让每一个元素对应一个位置参数或关键字参数。举例如下:
def f(a, b):
print a, b
num = (1,2)
f(*num)
说明:当调用f函数时,会告诉python,这里需要把num分解为两个元素1和2,之后分别传递给a和b。num前面的*必须有。
同理,对词典的unpacking举例如下:
def f(a, b):
print a, b
num = {“a”:1, “b”:2}
f(<span style="color:#FF0000;">**num</span>)
说明:传递num词典时,词典的每个键值对会作为一个关键字传递给f。
5. 重要:Python的函数参数传递的注意事项
在实际的编程中,参数的传递方式可以混合使用,但要遵循如下原则:
先位置,后关键字,其次包裹位置,最后包裹关键字。