Python的特有的参数传递(*和**)
目录
(Python的参数传递)
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);