如何正确调用含命名标准参数、*args和**kwargs的Python函数
解决Python函数调用中关键字参数后接位置参数的语法错误
Python语法规则明确:关键字参数不能出现在位置参数之前。你调用时先写val1=100, val2=200这类关键字参数,后面直接跟"a", "b", "c"位置参数,违反了这个规则,所以触发SyntaxError。
有两种可行的修正方式:
方式一:不修改函数定义,用*解包位置参数
把要传给*args的位置参数打包成元组或列表,通过*解包传递,这样就不会违反语法规则:
ar4(val1=100, val2=200, *("a", "b", "c"), k1=1, k2=2, k3="Three", k4=True)
调用后,args会接收("a", "b", "c"),kwargs接收{'k1':1, 'k2':2, 'k3':'Three', 'k4':True},函数正常输出。
方式二:修改函数定义,强制关键字参数(Python 3.8+)
如果希望val1和val2必须通过关键字传递,可以在函数定义里加入单独的*,将这两个参数标记为关键字-only参数:
def ar4(*, val1, val2, *args, **kwargs): print(val1) print(val2) print(args) print(kwargs)
之后调用时,必须用关键字传val1和val2,同时依然可以用*解包传递args的内容,调用方式和方式一相同。
内容的提问来源于stack exchange,提问作者vasili111
相关产品推荐
相关产品推荐

