python函数参数的传递
函数参数的使用需要关注两点:
- 函数参数是如何定义的;
- 在调用函数的过程中参数是如何解析的。
python中函数的定义方式
方式1:F(arg1, arg2,……)
-
形参个数和实参个数相等;
-
顺序需要相同。
方式2:F(arg1, arg2=value2, ……)
给参数提供了默认值;如果调用函数的时候给arg2传递了值,就用传递过来的值;如果调用时没有给arg2传递参数,那函数执行过程中就使用默认的value2。
-
形参个数和实参个数相等;
-
顺序需要相同。
*方式3:F(arg1)
-
加了*表示传递的实参数量不确定;
-
传递过来后,在函数内部以元组的形式存储。
**方式4:F(arg1)
- 加了**表示传递过来的实参数量不确定;
- 传递过来后,在函数内部以字典的形式存储。
参数解析
解析顺序:方式1 > 方式2 > 方式3 > 方式4
实例:
def fun(arg1, arg2=5, *arg3, **arg4):
return arg1, arg2, arg3, arg4
if __name__ == '__main__':
print("第一次执行函数:", fun(1))
print("第二次执行函数:", fun(1, 2))
print("第三次执行函数:", fun(1, 2, 6, 7))
print("第二次执行函数:", fun(1, 2, 6, 7, a=1))
>>>
第一次执行函数: (1, 5, (), {})
第二次执行函数: (1, 2, (), {})
第三次执行函数: (1, 2, (6, 7), {})
第二次执行函数: (1, 2, (6, 7), {'a': 1})
注意事项
-
没有默认值的形参需要放在有默认值的形参前面
def fun(arg1, arg2=5) # 正确的顺序 def fun(arg2=5, arg1) # 错误的顺序
-
不确定个数的形参(*arg、**arg)需要放在确定最后
def fun(arg1, *arg2) # 正确的顺序 def fun(*arg1, arg2) # 错误的顺序 def fun(*arg1, arg2=5) # 错误的顺序
参考链接
https://www.cnblogs.com/smiler/archive/2010/08/02/1790132.html