2013-02-07 78 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后?