在Python中,我可以在定义时在方法中使用全局变量的值,但在更改该变量时不能更改吗?

时间:2016-07-18 14:16:21

标签: python python-3.x methods global-variables

很难描述我需要的行为,所以我举一个例子。运行以下代码时,f()会打印"eggs",但我希望有一种方法可以f()打印"spam",这是x的值{} f声明的时间。

x = "spam"
def f():
    print(x)
x = "eggs"
f()

这似乎不是非常pythonic,但我已经考虑了我面临的问题,并得出结论,这个解决方案是最优雅的。如果有必要,我可以提供有关需要此解决方案的确切示例的更多详细信息。

3 个答案:

答案 0 :(得分:3)

一旦定义了x,就将f绑定到f

x = "spam"
def f(x=x):
    print(x)

x = "eggs"
f()
# spam

可能不是一个好主意。

答案 1 :(得分:0)

Moses Koledoye的答案已经足够,但通过实验我发现以下内容也适用于Python 3:

from functools import partial
x = "spam"
f = partial(print, x)
x = "eggs"
f()

我只是记下了这一点,因为它总是有助于选择

答案 2 :(得分:0)

您也可以在将x设置为垃圾邮件之前简单地调用该函数,如下所示:

x = 'spam' 
def f():
     print(x)
f()
x = "eggs"

由于您在设置x等于“eggs”之前调用该函数,因此该输出将是“垃圾邮件”。希望这有帮助