Назначение pass функции в Python

у меня есть кусок кода, который определяет функцию, которая принимает функцию в качестве аргумента, например, так:

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

теперь я хочу предоставить некоторое значение по умолчанию f, которое ничего не делает. Поэтому я решил использовать pass, например:

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

но это не компиляции. Как мне это сделать?

6 ответов


на pass - ключевое слово для интерпретатора, держатель места для ничего другого. Это не объект, который можно присвоить. Вы можете использовать лямбду без операции.

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

вы не можете assing пустой. Но вы можете создать внутреннюю функцию, которую вы назначите 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

IMHO выглядит чище, чем

if foo:
    foo()