当一个函数接受一个函数参数(或者一个类有一个函数槽)时,有两种方法可供选择:
def foo(..., my_func=None, ...):
...
if my_func:
my_func(...)
...
和
def foo(..., my_func=(lambda ...: None), ...):
...
my_func(...)
...
哪一个更具有Pythonic风格/清晰/可读性?
哪个更快--额外的布尔检查还是简单的函数调用?
发布于 2018-06-08 09:25:41
使用此命令时:
>>> 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 :在你的脸上爆炸。不要要求它安静。不管怎样,如果你使用它,它会产生恼人的噪音。
哪个更快--额外的布尔检查还是简单的函数调用?
为什么,以上帝的名义,你会在意?
根据记录,我发现这是可读的,但过于宽松:
>>> def buz(my_func = lambda **k:None):
... my_func()
...
>>> buz(bar)
Goodbye, World!
https://stackoverflow.com/questions/50751941
复制相似问题