将传递分配给Python中的函数

我有一段代码定义了一个函数,它将函数作为参数,如下所示:
def stuff(n, f):
  f(n)
现在,我想提供一些什么都不做的f的默认值。所以我想我会使用pass,就像这样:
def stuff(n, f = None):
  if(f is None):
    f = pass
  f(n)
但这不编译。我该怎么做?     
已邀请:
pass
是翻译的关键词,是一个没有任何东西的占位符。它不是您可以分配的对象。你可以使用no-op 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()
    

要回复问题请先登录注册