Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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_Optional Parameters_Optional Arguments - Fatal编程技术网

Python 可选参数的默认值

Python 可选参数的默认值,python,optional-parameters,optional-arguments,Python,Optional Parameters,Optional Arguments,我正在用python制作一个函数,它接受一个可选参数*args。此函数调用另一个传递此可选参数的函数。但是,当某个条件适用时,我希望可选参数具有某个默认值,而不是函数调用中传递的值。在下面的代码片段中很明显,简单地为*args设置一个新值是不正确的,但是正确的方法是什么 def function(arg1, arg2, *args): if condition: *args = value function2(*args) 您可以通过参数中的索引标识参数: de

我正在用python制作一个函数,它接受一个可选参数
*args
。此函数调用另一个传递此可选参数的函数。但是,当某个条件适用时,我希望可选参数具有某个默认值,而不是函数调用中传递的值。在下面的代码片段中很明显,简单地为
*args
设置一个新值是不正确的,但是正确的方法是什么

def function(arg1, arg2, *args):
    if condition:
        *args = value
    function2(*args)

您可以通过参数中的索引标识参数:

def function(arg1, arg2, *args):
    if condition:
        args = list(args)
        if len(args) == 0:  # the second arg in args was not set
            args.append("first default")
        if len(args) == 1:
            args.append("second default")
    function2(*args)

但正如你所看到的,这有点难看。它将涉及大量的
if
语句,以防需要使用大量默认位置参数。如果可以,请使用
**kwargs

显然
*args
是一个列表,因此我必须将其指定为
args=[value]
,而不是
*args=value
。这样就解决了问题。

不清楚为
*args
设置新值是否不正确。请解释一下,这是个错误哈哈。我认为这是糟糕的语法或类似的东西。它实际上是一个元组,所以从技术上讲,它应该是
args=(value,)
——但在大多数情况下,差异并不重要。