Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中具有任意数量的具有命名默认值的参数_Python_Function_Arguments - Fatal编程技术网

在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

我想用python编写一个函数,除了一个命名参数(默认值)之外,还可以接受任意数量的未命名参数

例如,我想写这样的东西

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"