python的传递方式具有两种值传递和引用传递。除此之外,python中还允许包裹方式的参数传递,这未不确定参数个数和参数类型的函数调用提供了基础:
值传递
- int、float等值传递
**特点,区别于C语言参数需要一一对应
上面代码的运行结果是:#eg1: def f(a,b,c): print(a,b,c) return f(1,2,3) f(b=1,a=2,c=3)
1 2 3
2 1 3
引用传递
- 以字典、列表等非值对象数据类型为代表
- def f(*a,**b)
*所对应的形参(如上面的a)会被解释为一个元组(tuple,而**所对应的形参(如上面的b)会被解释为一个字典。
上面代码的运行结果是:#eg2: def f(*a,**b): print(a) print(b) a=8 b=4 f(a,b,m=1,n=2)
(8 4)
{'m': 1, 'n': 2}
可见,对于不使用关键字传递的变量,会被作为元组的一部分传递给*a,而使用关键字传递的变量作为字典的一部分传递给了**b。
python中规定非关键字传递的变量必须写在关键字传递变量的前面,所以混合使用*和**时肯定时*形参在**形参的前面,如def f(*a,**b);