导入模块:函数中的全局变量

时间:2020-03-12 08:15:31

标签: python function import scope

有两个py文件。 util.py

def add_sum():
    print(x + 3)

test.py

from util import *
x=3
add_sum()

运行test.py时出现错误:

Traceback (most recent call last):
File "test.py", line 45, in <module>
    add_sum()
File "util.py", line 10, in add_sum
    print(x + 3)
NameError: name 'x' is not defined

变量 x 是全局变量,为什么函数无法达到 x 并引发错误?

1 个答案:

答案 0 :(得分:2)

Python的“全局变量”只是它们在其中定义的模块的全局变量。这是设计使然-仅在确实无法避免使用全局变量时才应使用全局变量,因为这会使代码更难以理解,测试和维护。 / p>

对于您而言,正确的方法是将x显式传递给您的函数:

 # util.py
 def add_sum(x):
     return x + 3

# test.py
# NB: star imports are evil too, for the very same reasons
from util import add_sum
x=3
print(add_sum(x))