如何设置星形参数的默认值?

2Cu*_*bed 4 python python-3.x

我有一个接受的函数*args,但我想设置一个默认元组,以防没有提供.(这是不可能的def f(*args=(1, 3, 5)),这会引发一个SyntaxError.)最好的方法是什么?预期的功能如下所示.

f()
# I received 1, 2, 3!

f(1)
# I received 1!

f(9, 3, 72)
# I received 9, 3, 72!
Run Code Online (Sandbox Code Playgroud)

以下功能g将提供正确的功能,但我更喜欢*args.

def g(args=(1, 2, 3)):
    return "I received {}!".format(', '.join(str(arg) for arg in args))

g()
# I received 1, 2, 3!

g((1,))
# I received 1!

g((9, 3, 72))
# I received 9, 3, 72!
Run Code Online (Sandbox Code Playgroud)

Rai*_*ide 11

你可以检查args你的函数是否真实:

def g(*args):
    if not args:
        args = (1, 2, 3)
    return "I received {}!".format(', '.join(str(arg) for arg in args))
Run Code Online (Sandbox Code Playgroud)

如果没有args传递给函数,它将导致一个空元组,其计算结果为False.


Håk*_*Lid 6

如果没有收到任何参数,args将是一个空元组.您不能在方法签名本身中添加默认值,但可以检查是否args为空并将其替换为函数内的回退值.

def g(*args):
    if not args: 
        args = (1, 2, 3)
    return 'I received {}!'.format(', '.join(str(arg) for arg in args))
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,同时提交了三个几乎完全相同的答案.这可能是[zen of Python](https://www.python.org/dev/peps/pep-0020/)中的一个原则的例子*"应该有一个 - 最好只有一个 - - 显而易见的方式."* (2认同)