我需要做这样的事情:
def func1(a, *args, b="BBB", **kwargs):
print "a=%s b=%s args=%s kwargs=%s" % (a, b, args, kwargs)
所以这样的调用:
func1("AAAA", h="HHH", j="JJJ")
产生输出:
a=AAAA b=BBB args=() kwargs={'h': 'HHH', 'j': 'JJJ'}
但是不可能在*args
. ( SyntaxError: invalid syntax
)
- 为什么不允许这样做?
- 有什么可读的方法来实现这个吗?我知道的唯一方法是
b=kwargs.pop("b", "BBB")
,但这不是很可读。我希望在函数调用定义中包含它,它所属的位置:它是一个始终具有值的参数,可以是默认值,也可以是用户给定的值。
编辑
我可以放在b
前面args
:
def func1(a, b="BBB", *args, **kwargs):
print "a=%s b=%s args=%s kwargs=%s" % (a, b, args, kwargs)
但这意味着这个电话:
func1("AAAA", "CCC", h="HHH", j="JJJ")
分配"CCC"
给b
,我不想要。我想b
成为一个命名的 arg,而不是一个位置的 arg。