1. Python 函数中参数前面一个和两个星号(**)的区别
例如
def foo(param1, *param2):
def bar(param1, **param2):
这两种用法其实都是用来将任意个数的参数导入到 Python 函数中。
看代码
# 带*的函数
def myFun2(a, *b):
print(a, b)
# 带**的函数
def myFun3(a, **b):
print(a, b)
# 结合使用*和**
def merge(a,b,*c,**d):
print(a,b,c,d)
myFun2(1, 2, 3, 4)
myFun3(1, age=2, hieght=3) # 注意这里的key不需要带引号,而其key不能是数字
merge(9,8,5,5,5,name="bob",address="china")
输出:
1 (2, 3, 4)
1 {
'age': 2, 'hieght': 3}
9 8 (5, 5, 5) {
'name': 'bob', 'address': 'china'}
所以得出结论:*args是以元组的形式传入。 **args是以字典的形式传入
2. Python函数中有/和*的形参
例如:
/和*占一个参数位置
代码解释:
def f1(a,b,/):
print(a,b)
def f2(a,*,b,c):
print(a,b,c)
f1(19,9) # (a=19,b=9)不行,会报错
f2(1,b=1,c=1) # 只能用这种格式
运行结果:
19 9
1 1 1
结论:
首先要区分“位置参数”和“关键字参数”,这两种参数的区别
位置参数:穿的参数必须按函数里面写的位置先后,一个一个传,例如:fun(1)
关键字参数:可以不按顺序,但是实参前面必须带有形参,例如:fun(age=1)
- ’/‘ 之前的参数都是 positional-only 参数,不能 写出参数的 name
- ’*‘ 之后的参数都是 keyword-only 参数,必须 写出参数的 name
总结
知道“位置参数”和“关键字参数”的区别后
如果你希望调用者使用函数时一定 不能 使用关键字参数传参,那么只需要把这些参数放在/前即可;
如果你希望调用者使用函数时一定要使用某些参数,且必须为关键字参数传参,那么只需要把这些参数放在*后面即可。
不按规则穿参就会报错
3. 默认参数
这个就比较简单了
# 默认值函数
def moren(a=0,b=0):
print(a,b)
moren()
输出结果:
0,0
如有不对,欢迎指正
参考博客:
http://blog.itpub.net/69955379/viewspace-2694268/
https://www.zhihu.com/question/287097169