什么更 pythonic:琐碎的 lambda 或 None?

What is more pythonic: trivial lambda or None?

当函数接受函数参数(或 class 有函数槽)时,有两种方法可供选择:

def foo(..., my_func=None, ...):
    ...
    if my_func:
        my_func(...)
    ...

def foo(..., my_func=(lambda ...: None), ...):
    ...
    my_func(...)
    ...

还有什么Pythonic/clear/readable?

什么更快 - 额外的布尔检查还是简单的函数调用?

使用时:

>>> def bar():
...     print("Goodbye, World!")
...

我觉得这很易读:

>>> def foo(my_func = lambda : None):
...     my_func()
...
>>> foo()
>>> foo(bar)
Goodbye, World!

我觉得这很烦人

>>> def baz(my_func = None):
...     if my_func is not None:
...         my_func()
...
>>> baz()
>>> baz(bar)
Goodbye, World!

尽量让 None 检查您的生活。当你想让它做它擅长的事情时使用 None:当着你的面炸。不要要求它安静。如果您使用它,它会以某种方式产生烦人的噪音。

What is faster - an extra boolean check or a trivial function call?

为什么,以上帝的名义,你在乎吗?


郑重声明,我发现这可读性强但过于宽容:

>>> def buz(my_func = lambda **k:None):
...     my_func()
...
>>> buz(bar)
Goodbye, World!