Closed andyRon closed 5 years ago
回答问题:
def keyOnly(a, *b, c)
与 def keyOnly(a, c, *b)
含义不同,前者c必须使用关键字匹配,后者c等同普通参数,可使用关键字匹配也可位置匹配。另外b是一个tuple,具体可看后面例子。
`def keyOnly(a, , b, c)里面的
*`,我理解的是一个特殊标识,其后所有参数必须使用关键字匹配。
看例子:
# 例1
def keyOnly(a, *b, c):
print(a, b, c)
keyOnly(1, 2, 3) # 报错 | c是必须使用关键字匹配的
keyOnly(1, 2, c=3) # 1 (2,) 3 | a位置匹配了1,c关键字匹配了3,剩余部分都给b
keyOnly(1, 2, 3, c=4) # 1 (2, 3) 4 | a位置匹配了1,c关键字匹配了4,剩余部分都给b
# 例2
def keyOnly(a, *, b, c):
print(a, b, c)`
keyOnly(1, 2, 3) # 报错 | b,c必须关键字匹配
keyOnly(1) # 报错 | b,c不可缺少
keyOnly(1, b=2, c=3) # 1,2,3 | b,c使用了关键字匹配
# 说明:*后面的参数,必须使用关键字匹配,而且在没有默认值的情况下必须使用关键字传入
# 例3
def keyOnly(a, *, b=1):
print(a, b)
keyOnly(1) # 1,1 | 这里跟例2的区别是b有默认值
keyOnly(1, 2) # 报错 | b必须使用关键字匹配
keyOnly(1, b=2) # 1,2 | b使用了关键字匹配
@Java-via
这样理解都没问题。我也是这样理解。但是实际定义时都是语法错误
In [513]: def keyOnly(a, *b, c):
File "<ipython-input-513-33899a4618ce>", line 1
def keyOnly(a, *b, c):
^
SyntaxError: invalid syntax
In [514]: def keyOnly(a, *, b, c):
File "<ipython-input-514-6c4803bea73d>", line 1
def keyOnly(a, *, b, c):
^
SyntaxError: invalid syntax
In [515]: def keyOnly(a, *, b=1):
File "<ipython-input-515-787a0f504685>", line 1
def keyOnly(a, *, b=1):
^
SyntaxError: invalid syntax
我记得函数参数定义的顺序是:必选参数、默认参数、可变参数和关键字参数,这边的*b
和*
是必须放在后面的。 我用的是2.7,不知道是不是3.x之后没有这个规定?
2.x版本不支持。
@xianhu 估计就是这个问题! phper学习python,见笑了,谢谢!
@xianhu 无限期待3.6向前兼容
python_base.py
L524def keyOnly(a, *b, c)
是不是应该是def keyOnly(a, c, *b)
?def keyOnly(a, *, b, c)
这边的*
怎么理解?