NameError: глобальное имя 'name' не определено (пока оно определено).
Я новичок в Python и сейчас делаю какую-то программу с ним.
У меня есть два файла, которые trans.py
а также main.py
,
В trans.py
,
from math import *
from numpy import *
def matrix_T(d):
global mat_A, mat_B, mat_C, mat_D
temp_A, temp_B, temp_C, temp_D = mat_A, mat_B, mat_C, mat_D
mat_A = 1.0*temp_A + d*temp_C
mat_B = 1.0*temp_B + d*temp_D
mat_C = 1.0*temp_C
mat_D = 1.0*temp_D
В main.py
,
from trans import *
global mat_A, mat_B, mat_C, mat_D
mat_A = 1.0
mat_B = 0.0
mat_C = 0.0
mat_D = 1.0
print(mat_A, mat_B, mat_C, mat_D)
matrix_T(0.0)
print(mat_A, mat_B, mat_C, mat_D)
и когда я бегу main.py
, конечно, получите эту ошибку.
Traceback (most recent call last):
File "main.py", line 11, in <module>
matrix_T(0.0)
File "trans.py", line 6, in matrix_T
temp_A, temp_B, temp_C, temp_D = mat_A. mat_B, mat_C, mat_D
NameError: global name 'mat_A' is not defined
Так как я думал, что определил глобальную переменную mat_A для mat_D, как я мог избежать этой проблемы?
Заранее спасибо.
1 ответ
Первый пункт: global <name>
не определяет переменную, она только сообщает среде выполнения, что в этой функции "<name>
"придется искать в" глобальном "пространстве имен вместо локального.
Второй момент: в Python "глобальное" пространство имен действительно означает пространство имен верхнего уровня текущего модуля. И это самое "глобальное" пространство имен, которое вы получите в Python (надеюсь). Таким образом, определение переменных с тем же именем в другом модуле не сделает их доступными для вашей функции (и это GoodThing).
Последний пункт: не используйте глобалы в любом случае. Передайте необходимые аргументы вашим функциям и заставьте ваши функции возвращать вычисленные значения. глобалы злые