python函数中的动态默认参数

Dra*_*kin 5 python

我需要具有必须在函数运行时设置的默认参数的函数(例如空列表,从其他参数派生的值或从数据库中获取的数据),并且我目前正在使用以下模式来处理此问题:

def foo(bar, baz=None):
    baz = baz if baz else blar()
    # Stuff
Run Code Online (Sandbox Code Playgroud)

其中blar()给出了baz在执行期间可能更改的正确默认值.然而,这baz = baz if baz else ...条线条让我感到不雅.有没有其他人有更好的方法来避免默认函数参数的一次性绑定?可由pip安装的小型跨平台库是可接受的替代品.

Joh*_*ooy 9

不,这就是它.通常你测试is None,所以你可以像falsey值安全地通过0""等.

def foo(bar, baz=None):
    baz = baz if baz is not None else blar()
Run Code Online (Sandbox Code Playgroud)

老式的方式是两个班轮.有些人可能更喜欢这个

def foo(bar, baz=None):
    if baz is None:
        baz = blar()
Run Code Online (Sandbox Code Playgroud)

  • 当`baz`不是'None`时,老式的方式避免了不必要的重新分配. (3认同)

Ale*_*all 6

你可以更换

baz = baz if baz else blar()
Run Code Online (Sandbox Code Playgroud)

baz = baz or blar()
Run Code Online (Sandbox Code Playgroud)

如果您仍然对仅测试虚假值而不是None.