Python 还有什么更像蟒蛇呢:小羔羊还是无羔羊?
当函数接受函数参数(或类具有函数槽)时,可以在两种方法之间进行选择:Python 还有什么更像蟒蛇呢:小羔羊还是无羔羊?,python,python-3.x,coding-style,Python,Python 3.x,Coding Style,当函数接受函数参数(或类具有函数槽)时,可以在两种方法之间进行选择: def foo(..., my_func=None, ...): ... if my_func: my_func(...) ... 及 还有什么更具Pythonic/清晰/可读性 什么更快?一个额外的布尔检查还是一个简单的函数调用?使用此选项时: >>> def bar(): ... print("Goodbye, World!") ... 我觉得这很有可读
def foo(..., my_func=None, ...):
...
if my_func:
my_func(...)
...
及
还有什么更具Pythonic/清晰/可读性
什么更快?一个额外的布尔检查还是一个简单的函数调用?使用此选项时:
>>> 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!
x不是None
可能比(lambda:None)(
快。当然,这对你自己来说是非常简单的。出于可读性原因,我更喜欢None检查(使用is
)而不是默认的lambda,这是一种常见的Python习惯用法,我认为这实际上取决于您的其余代码在做什么。如果没有一个稍微具体一点的例子,我真的不能说完全同意@OlivierMelançon,这取决于实际情况,我们的假设可能会改变。我倾向于使用None
作为默认参数,因为调用方不必考虑如何启用默认行为——只要使用None
。如果默认参数不是None
,则要获得默认行为,调用方不得指定参数(或必须知道其默认值)。@juanpa.arrivillaga:您似乎不同意ATM提供的唯一答案。这是否意味着没有共识?!;-)是否需要将一些参数传递到函数中?lambda函数应该是lambda*args,**kwargs:None
。这不是也很烦人吗?不def foo(my_func=lambda x:None):my_func(“残酷世界!”)
但这不是唯一的情况,如果my_func
的签名是my_func(a,b,c,d=xxx,e=xxx)
。然后,您必须按照我给出的那样编写一个通用lambda。@Sraw您混淆了函数允许的内容和我如何使用它。我只需要公布我如何使用它。如果我将三个参数传递给我的_func,那么我的lambda只需要请求三个参数函数。如果你的函数可以处理我的三个参数,那么不管它有多少个选项,它都适合我的三个参数lambda。。。我真的很困惑。我的意思是,有时候你无法预先确定my_func需要多少参数。或者有时您有多个不同的foo
,它们接受不同的my_func
,因此您需要为每个foo
编写不同的lambda函数。或者您可以编写一个适合所有情况的最终版本lambda*args,**kwargs:None
。
>>> def buz(my_func = lambda **k:None):
... my_func()
...
>>> buz(bar)
Goodbye, World!