当我运行下面的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
我无法理解这种情况。
有人可以帮我吗?
谢谢您的建议。
答案 0 :(得分:2)
Python没有真正的全局变量,只有 module 级全局变量。 Z
访问的getZ
是getZ.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,即使重新绑定模块全局变量也是邪恶的,应尽可能避免(如果您重视心理健康,则应将全局变量视为常量)。