модуль импорта: глобальная переменная внутри функции - PullRequest
0 голосов
/ 12 марта 2020

Есть два файла 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 Ответ

2 голосов
/ 12 марта 2020
«Глобалы»

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...