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

passインタープリターのキーワードであり、それ以外の場合は何もないプレースホルダーです。割り当てることができるオブジェクトではありません。no-op ラムダを使用できます。

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 に答える