什么更 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!
当函数接受函数参数(或 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!