当函数接受函数参数(或类有函数槽)时,可以选择两种方法:
def foo(..., my_func=None, ...):
...
if my_func:
my_func(...)
...
和
def foo(..., my_func=(lambda ...: None), ...):
...
my_func(...)
...
什么是Pythonic / clear / readable?
什么是更快 - 一个额外的布尔检查或一个简单的函数调用?
答案 0 :(得分:1)
使用时:
>>> 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!
尽量保持无生命的检查。如果你想让它做得好的话,请使用无:吹拂你的脸。不要问它安静。如果你使用它会以某种方式产生烦人的噪音。
什么是更快 - 一个额外的布尔检查或一个简单的函数调用?
为什么,以上帝的名义,你在乎吗?
为了记录,我觉得这个可读但是过于宽容:
>>> def buz(my_func = lambda **k:None):
... my_func()
...
>>> buz(bar)
Goodbye, World!