1.传递参数
在通过传递参数时,根据传递的值是否可变,有两种形式。
- 不可变参数:这中方式与java中的值传递一样,只是把值传过去,函数中处理的结果不会影响调用函数时用的变量。
-
可变参数: 这种方式即相当于引用传递,函数中改变该变量,外部的变量也会跟着变。
2.特定参数
1. 普通参数:按顺序匹配 f(a,b)
2. 关键字参数:根据参数名进行匹配 f(name=a)
3. 默认参数:在定义函数时就给定了默认值的变量,如果调用时不给值,则使用默认值 f(a=1)
4. 可变参数:可接受多个参数 f(*a)
5. 可变参数解包:接受多个带关键字的参数 f(**a)
6. Keyword-only参数:参数必须按照名称传递f(*a,name=b)
用法:
l 参数顺序必须是,普通参数——>关键字参数——>可变参数——>可变参数解包
l 通过位置分配非关键字参数
l 通过匹配变量名分配关键字参数
l 其他额外的非关键字参数分配到可变参数*a
l 其他额外关键字参数分配到可变参数解包**a
l Keyword-only参数必须是跟在一个可变参数后面,调用时必须用关键字参数调用
例子:
1.def F(a,b,c):print(a,b,c,end=’,’) 普通参数与关键字参数
F(1,2,3) 结果:1,2,3
F(a=3,c=1,b=2) 结果:3,2,1
F(c=2,1,3) 结果:1,3,2
2.def F(a,b,c=0,d=0):print(a,b,c,d,end=’,’) 关键字参数与默认参数
F(1,2) 1,2,0,0
F(1,d=1,b=0) 1,0,0,1
3.def F(a,*b,**c):print(a,b,c,end=’,’) 综合
F(1,2,3,4,x=1,y=0) 1,(2,3,4),{’x’:1,‘y’:0}
4.def F(a,*b,e) :print(a,b,e,end=’,’) Keyword-only参数
F(1,2,3,4,e=9) 1,(2,3,4),9
解包参数:
在调用函数时,可以用*或**来解包集合
如:
defF(a,b,c,d)
x=(1,2,3,4)
F(*x) 即可调用
Z={‘a’=1,’b’=2,’c’=3,’d’=4}
F(**z) 就相当于关键字参数形式调用