2013-02-07 79 views
1

我願意做這樣的事情:蟒蛇功能重新定義

f = lambda x: None 

x = [f] 

def f(n): 
    return n 

print x[0](2) 

預期的結果是2,但它實際上是None

我知道可以用類來解決,但是可以在沒有它們的情況下完成嗎?

+1

不,不是沒有'x [0] = f'再次。 [此前我的答案](http://stackoverflow.com/questions/12080552/python-list-doesnt-reflect-variable-change-new-to-python/12080644#12080644)揭示了爲什麼這不會'以任何方式工作? –

+0

那麼,@MartijnPieters先前的答案是偉大的(一如既往),只是不明白什麼是一個嚴重的用例,給你的例子。 –

回答

0

在這裏,您正在創建一個匿名函數並將其添加到列表中。現在有兩個引用指向lambda。雖然您定義了另一個具有相同名稱f的函數,但它不會影響列表中的引用,因爲它指向lambda。

你想在這裏實現什麼?

0

您正在將函數的引用存儲在列表x中,而不是其名稱。

你可以做類似

f = lambda x: None 
x = ['f'] 
def f(n): 
    return n 

print globals()[x[0]](2) 

但這是有點 「壞」。也許你可以解釋你爲什麼試圖這樣做,我們可以找到更好的方法。

0

可以在設定f作爲全局變量:

全球˚F
F =拉姆達X:X + 1

X = F

X(1)

OUT: 2

f = lambda x:x + 2

X = F

X(1)

OUT:3

0

嗯,這很容易(:。函數是其他任何東西的對象。什麼做

x = [f] 

x[0] = f 

你重新定義˚F後?