Py学习  »  Python

python全局变量不适用于新文件的用户定义函数

김민재 • 5 年前 • 1673 次点击  

当我运行下面的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

我不能理解这种情况。

有人能帮我吗?

谢谢你的建议。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40146
 
1673 次点击  
文章 [ 2 ]  |  最新文章 5 年前
bruno desthuilliers
Reply   •   1 楼
bruno desthuilliers    6 年前

python“globals”只是模块的globals,没有进程范围的globals,所以 getZ.getZ() 集合 getZ.Z 不是 main2.Z . 这是设计的,这是一件好事(TM),进程范围内的全局都是纯邪恶和完全无用的。fwiw,甚至重新绑定模块globals都是有害的,应该尽可能避免(如果您重视您的心智健全,globals应该被视为常量)。

chepner
Reply   •   2 楼
chepner    6 年前

python没有真正的全局变量,只有 模块 -水平全局。这个 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)