在python中具有任意数量的具有命名默认值的参数
我想用python编写一个函数,除了一个命名参数(默认值)之外,还可以接受任意数量的未命名参数 例如,我想写这样的东西在python中具有任意数量的具有命名默认值的参数,python,function,arguments,Python,Function,Arguments,我想用python编写一个函数,除了一个命名参数(默认值)之外,还可以接受任意数量的未命名参数 例如,我想写这样的东西 def myFunc(*args, optDefault=1): 但这只是给出了一个语法错误。有没有等效的方法可以做到这一点?那么: def myFunc(optDefault=1, *args): 你为什么不使用, 一个例子(我借用) 那怎么办 def myFunc(*args, **kwargs): optDefault = kwargs.pop('optDef
def myFunc(*args, optDefault=1):
但这只是给出了一个语法错误。有没有等效的方法可以做到这一点?那么:
def myFunc(optDefault=1, *args):
你为什么不使用,
一个例子(我借用)
那怎么办
def myFunc(*args, **kwargs):
optDefault = kwargs.pop('optDefault', 1)
assert kwargs == {}, "There may only be one keyword argument to myFunc"
虽然不是最漂亮的,但很管用。谢谢!但是我不知道怎么称呼它。myFunc(optDefault=3,1,2)和myFunc(1,2,optDefault=3)都有错误。@highBandWidth那么myFunc(3,1,2)呢?@shookan:你的建议会破坏关键字args的观点(无论对于highBandWidth是什么),assert not(kwargs)是一个更好的习惯用法;)GaretJax:我想这是口味的问题:-)不是函数?讨厌!这样的事情应该导致
类型错误
,而不是断言错误
。是的,not-kwargs
更为惯用(虽然多态性在这里并不重要,但假设type(kwarg)是dict
),这是一个相当省钱的选择)。optpass是另一种用法(解析命令行选项)。
def myFunc(*args, **kwargs):
optDefault = kwargs.pop('optDefault', 1)
assert kwargs == {}, "There may only be one keyword argument to myFunc"