NameError:未定义全局名称'name'(定义时).

0 python global-variables nameerror

我是python的新手,现在用它制作一些程序.

我有两个文件,它们是trans.pymain.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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

当我跑步时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
Run Code Online (Sandbox Code Playgroud)

由于我认为我将全局变量mat_A定义为mat_D,我怎么能避免这个问题呢?

提前致谢.

bru*_*ers 5

第一点:global <name>没有定义变量,它只告诉运行时在这个函数中," <name>"必须在"全局"命名空间而不是本地命名空间中查找.

第二点:在Python中,"全局"命名空间实际上意味着当前模块的顶级命名空间.这是你在Python中获得的最"全局"命名空间(希望如此).因此,在另一个模块中使用相同名称定义变量将不会使它们可用于您的函数(这是一个GoodThing).

最后一点:无论如何都不要使用全局变量.将所需的参数传递给函数,并使函数返回计算值.全局是邪恶的.