Python全局变量不适用于新文件的用户定义功能

时间:2018-10-09 14:54:56

标签: python global-variables return-value user-defined-functions calling-convention

当我运行下面的python代码时,结果为0、5

#file name main1.py
def getZ(x,y):
    global Z
    Z=x*x+y*y
    return Z

global X,Y,Z

X=1 
Y=2
Z=0
print(Z)
getZ(X,Y);
print(Z)

但是当我运行下面的文件

#file name main2.py
import getZ

global X,Y,Z
X=1     
Y=2
Z=0
print(Z)
getZ.getZ(X,Y);
print(Z)

具有新的用户定义功能,

#file name getZ.py
def getZ(x,y):
    global Z
    Z=x*x+y*y
    return Z

结果为0,0

我无法理解这种情况。

有人可以帮我吗?

谢谢您的建议。

2 个答案:

答案 0 :(得分:2)

Python没有真正的全局变量,只有 module 级全局变量。 Z访问的getZgetZ.Z,而不是您在__main__.Z中设置的main2.py

这将起作用:

#file name main2.py
import getZ

X=1     
Y=2
getZ.Z = 0  # Set the value of the variable `getZ.getZ` looks for.
print(getZ.Z)
getZ.getZ(X, Y)
print(getZ.Z)

答案 1 :(得分:1)

Python“全局变量”仅是模块的全局变量,没有进程范围的全局变量,因此getZ.getZ()设置了getZ.Z,而不是main2.Z。这是设计使然,这是一个GoodThing(tm),整个过程范围的全局变量都是纯邪恶的,完全没有用。 FWIW,即使重新绑定模块全局变量也是邪恶的,应尽可能避免(如果您重视心理健康,则应将全局变量视为常量)。