【问题标题】:import module : global variable within function导入模块:函数内的全局变量
【发布时间】:2020-03-12 08:15:31
【问题描述】:

有两个 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并报错?

【问题讨论】:

标签: python function import scope


【解决方案1】:

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

在您的情况下,正确的方法是将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))

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2014-02-18
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多