在Python中,我可以根据其他参数指定函数参数的默认值吗?

Rya*_*son 29 python arguments function default-value

假设我有一个带有两个参数的python函数,但我希望第二个arg是可选的,默认是作为第一个参数传递的任何东西.所以,我想做这样的事情:

def myfunc(arg1, arg2=arg1):
    print (arg1, arg2)
Run Code Online (Sandbox Code Playgroud)

除此之外不起作用.我能想到的唯一解决方法是:

def myfunc(arg1, arg2=None):
    if arg2 is None:
        arg2 = arg1
    print (arg1, arg2)
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

mar*_*cog 24

正如@Ignacio所说,你不能这样做.在后一个示例中,您可能会遇到None一个有效值的情况arg2.如果是这种情况,您可以使用sentinel值:

sentinel = object()
def myfunc(arg1, arg2=sentinel):
    if arg2 is sentinel:
        arg2 = arg1
    print (arg1, arg2)

myfunc("foo")           # Prints 'foo foo'
myfunc("foo", None)     # Prints 'foo None'
Run Code Online (Sandbox Code Playgroud)

  • 最好只将arg2默认设置为None,然后检查它而不是打扰自定义的哨兵对象,除非您需要处理用户提供的与默认值没有不同的对象 (2认同)

Ign*_*ams 6

并不是的。在实际输入函数之前,其他自变量名称不存在。

  • @Michael如果arg2是0,False或空序列,则失败。 (2认同)