社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

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

当我运行下面的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
 
1641 次点击  
文章 [ 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)