Python 函数参数*expression 之后为什么只能跟关键字参数
python 为何要设计这种?
正确:
def f(a=2,b=2,c=3): return a+b+c print(f(*(1,1),c=1))
错误:
def f(a=2,b=2,c=3): return a+b+c print(f(*(1,1),1))
会被提示:
而这个会被提示:
def f(a=2,b=2,c=3): return a+b+c print(f(a=1,*(1,1)))
>>> Traceback (most recent call last): File "C:\Users\un_ieval.py", line 91, in <module> print(f(a=1,*(1,1))) TypeError: f() got multiple values for argument 'a'
改变a的参数类别才恢复正常:
def f(a,b=2,c=3): return a+b+c print(f(1,*(1,1))) def f(a,b,c): return a+b+c print(f(1,*(1,1)))
可见,为了能够最大限度运用*expression,尽量不要使用默认参数.