将传递分配给Python中的函数

Lin*_*des 8 python function optional-parameters optional-arguments

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

def stuff(n, f):
  f(n)
Run Code Online (Sandbox Code Playgroud)

现在,我想提供一些什么都不做的f的默认值.所以我想我会使用pass,就像这样:

def stuff(n, f = None):
  if(f is None):
    f = pass
  f(n)
Run Code Online (Sandbox Code Playgroud)

但这不编译.我该怎么做?

Kei*_*ith 19

pass是解释者的关键词,没有其他任何东西的占位符.它不是您可以分配的对象.你可以使用no-op lambda.

f = lambda x: None
Run Code Online (Sandbox Code Playgroud)


Nic*_*vre 9

为什么不简单呢?

def stuff(n, f=None):
    if f is None:
        return
    return f(n)
Run Code Online (Sandbox Code Playgroud)

  • 小改进:[PEP8](http://www.python.org/dev/peps/pep-0008/)建议使用`is None`而不是`== None`([理由](http:// jaredgrubb) .blogspot.com/2009/04 /蟒-是-NONE-VS-none.html)). (2认同)

Bjö*_*lex 5

稍短一些:

def stuff(n, f=None):
  f = f or (lambda x: None)
  f(n)
Run Code Online (Sandbox Code Playgroud)

甚至更好:

def stuff(n, f=None):
    f(n) if f is not None else None
Run Code Online (Sandbox Code Playgroud)