【发布时间】:2023-04-06 19:00:01
【问题描述】:
鉴于以下函数和对print_stuff()
的调用,有人可以解释为什么在没有关键字 arg default 但将列表传递给*args
的情况下调用函数时会出现意外行为吗?
我知道涉及可变/不可变关键字默认值的“陷阱”,但我认为这与此处无关。
有人可以澄清为什么会发生这种情况,或者任何语法/调用错误吗?
def print_stuff(arg, kwarg=None, *args):
print "arg: %s" % arg
if kwarg:
print "kwarg: %s" % kwarg
if args:
for a in args:
print "printing {} from args".format(a)
print "===end==="
args_list = range(1, 3)
kwargs_list = {str(a):a for a in args_list}
print_stuff('hi', kwarg='some_kwarg') # works as intended
print_stuff('hi', 'some_kwarg', *range(1, 3)) # also works as intended
print_stuff('hi', *range(1, 3)) # first element of list unexpectedly passed in to keyword argument, even using the * notation
print_stuff('hi', kwarg='some_kwarg', *range(1, 3)) # TypeError: print_stuff() got multiple values for keyword argument 'kwarg'
【问题讨论】:
-
您没有任何关键字-only 参数,因此您传入的第二个参数将分配给
kwarg
。 -
第二个值作为第二个参数传入有什么意外?
标签:
python
args
keyword-argument
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用参数、关键字参数、*args、**kwargs 与 Python 函数混淆 - Python技术站