8

我有一段代码定义了一个将函数作为参数的函数,如下所示:

def stuff(n, f):
  f(n)

现在,我想提供一些 f 的默认值,它什么都不做。所以我想我会使用通行证,如下所示:

def stuff(n, f = None):
  if(f is None):
    f = pass
  f(n)

但这不会编译。我应该怎么做?

4

6 回答 6

19

thepass是解释器的关键字,是其他任何内容的占位符。它不是您可以分配的对象。您可以使用无操作 lambda。

f = lambda x: None
于 2011-02-28T10:08:58.483 回答
9

为什么不简单地这样做呢?

def stuff(n, f=None):
    if f is None:
        return
    return f(n)
于 2011-02-28T10:07:00.850 回答
5

短一点:

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
于 2011-02-28T10:10:41.587 回答
4

你不能空手而归。但是您可以创建内部功能,您将分配给f.

def stuff(n, f=None):
  def empty(n):
    pass
  if f is None:
    f = empty
  f(n)
于 2011-02-28T09:59:33.253 回答
3

通用 noop 函数:

f = lambda *x,**y:None

你可以打电话

f()
f(0,foo=0)
于 2014-09-22T10:30:12.540 回答
1

我会去

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()
于 2016-06-02T07:35:23.003 回答