私はこのようなことをしたいです:
f = lambda x: None
x = [f]
def f(n):
return n
print x[0](2)
期待される結果はですが2
、実際はNone
です。
クラスで解決できることは知っていますが、クラスなしで解決できますか?
私はこのようなことをしたいです:
f = lambda x: None
x = [f]
def f(n):
return n
print x[0](2)
期待される結果はですが2
、実際はNone
です。
クラスで解決できることは知っていますが、クラスなしで解決できますか?
ここでは、無名関数を作成してリストに追加しています。現在、ラムダを指す 2 つの参照があります。同じ名前 f で別の関数を定義しても、ラムダを指しているため、リスト内の参照には影響しません。
ここで何を達成しようとしていますか?
うーん、それは簡単です (:. 関数は他のものと同じようにオブジェクトです。
x = [f]
また
x[0] = f
fを再定義した後?
f をグローバル変数として設定できます。
グローバル f
f = ラムダ x: x+1
x = f
×(1)
アウト: 2
f = ラムダ x: x+2
x = f
×(1)
アウト: 3
関数への参照を名前ではなくリスト x に格納しています。
あなたは次のようなことができます
f = lambda x: None
x = ['f']
def f(n):
return n
print globals()[x[0]](2)
しかし、これはちょっと「悪い」です。なぜそうしようとしているのかを説明していただければ、より良い方法を見つけることができます。