Глобальная переменная Python не работает с пользовательской функцией нового файла - PullRequest
0 голосов
/ 09 октября 2018

Когда я запускаю приведенный ниже код 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 голосов
/ 09 октября 2018

Python "globals" - это только глобальные переменные модуля, глобальные переменные всего процесса отсутствуют, поэтому getZ.getZ() устанавливает getZ.Z, а не main2.Z.Это сделано по замыслу, и это GoodThing (tm), глобальные процессы всего процесса являются чистым злом и абсолютно бесполезны.FWIW, даже повторное связывание глобалов модуля является злом, и его следует избегать, насколько это возможно (глобалы следует рассматривать как константы, если вы цените свое психическое здоровье).

0 голосов
/ 09 октября 2018

В 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)
...