我願意做這樣的事情:蟒蛇功能重新定義
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
。
我知道可以用類來解決,但是可以在沒有它們的情況下完成嗎?
在這裏,您正在創建一個匿名函數並將其添加到列表中。現在有兩個引用指向lambda。雖然您定義了另一個具有相同名稱f的函數,但它不會影響列表中的引用,因爲它指向lambda。
你想在這裏實現什麼?
您正在將函數的引用存儲在列表x中,而不是其名稱。
你可以做類似
f = lambda x: None
x = ['f']
def f(n):
return n
print globals()[x[0]](2)
但這是有點 「壞」。也許你可以解釋你爲什麼試圖這樣做,我們可以找到更好的方法。
可以在設定f作爲全局變量:
全球˚F
F =拉姆達X:X + 1
X = F
X(1)
OUT: 2
f = lambda x:x + 2
X = F
X(1)
OUT:3
嗯,這很容易(:。函數是其他任何東西的對象。什麼做
x = [f]
或
x[0] = f
你重新定義˚F後?
不,不是沒有'x [0] = f'再次。 [此前我的答案](http://stackoverflow.com/questions/12080552/python-list-doesnt-reflect-variable-change-new-to-python/12080644#12080644)揭示了爲什麼這不會'以任何方式工作? –
那麼,@MartijnPieters先前的答案是偉大的(一如既往),只是不明白什麼是一個嚴重的用例,給你的例子。 –