我有一段代码定义了一个将函数作为参数的函数,如下所示:
def stuff(n, f):
f(n)
现在,我想提供一些 f 的默认值,它什么都不做。所以我想我会使用通行证,如下所示:
def stuff(n, f = None):
if(f is None):
f = pass
f(n)
但这不会编译。我应该怎么做?
我有一段代码定义了一个将函数作为参数的函数,如下所示:
def stuff(n, f):
f(n)
现在,我想提供一些 f 的默认值,它什么都不做。所以我想我会使用通行证,如下所示:
def stuff(n, f = None):
if(f is None):
f = pass
f(n)
但这不会编译。我应该怎么做?
thepass
是解释器的关键字,是其他任何内容的占位符。它不是您可以分配的对象。您可以使用无操作 lambda。
f = lambda x: None
为什么不简单地这样做呢?
def stuff(n, f=None):
if f is None:
return
return f(n)
短一点:
def stuff(n, f=None):
f = f or (lambda x: None)
f(n)
甚至更好:
def stuff(n, f=None):
f(n) if f is not None else None
你不能空手而归。但是您可以创建内部功能,您将分配给f
.
def stuff(n, f=None):
def empty(n):
pass
if f is None:
f = empty
f(n)
通用 noop 函数:
f = lambda *x,**y:None
你可以打电话
f()
f(0,foo=0)
我会去
def nop(*args, **kwargs):
pass
def algo(func=nop):
do_something()
func()
do_something_else()
algo() # nop is called
algo(some_callback) # some_callback is called
恕我直言,看起来比
if foo:
foo()