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

Последний пункт: не используйте глобалы в любом случае. Передайте необходимые аргументы вашим функциям и заставьте ваши функции возвращать вычисленные значения. глобалы злые

Другие вопросы по тегам