python含有/,*,**参数的函数

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

猜你喜欢

转载自blog.csdn.net/qq_40733911/article/details/114292675