Если я изменяю данные глобальной переменной Python из функции, она выдает ошибку. (Работает нормально, если не передать никаких аргументов) - PullRequest
0 голосов
/ 01 марта 2020

Вкл. python 3,6,

Код 1:

x="glob"
def reg(x):
    print(x)
    x="loc"
    print(x)
reg(x)

Выход:

glo-lo c

Код 2:

x="glob"
def reg():
    print(x)
    x="loc"
    print(x)
reg()

Вывод:

Traceback (most recent call last):
  File "D:\Projects\Python\abc.py", line 6, in <module>
    reg()
  File "D:\Projects\Python\abc.py", line 3, in reg
    print(x)
UnboundLocalError: local variable 'x' referenced before assignment

Почему это происходит? Какая разница, если я не передаю глобальную переменную в функцию ?? Разве он не должен быть доступен для всех функций?

Ответы [ 3 ]

0 голосов
/ 01 марта 2020

Вы должны пользователь глобальный.
Код 2

x="glob"
def reg():
    global x
    print(x)
    x="loc"
    print(x)
reg()
0 голосов
/ 01 марта 2020

Область видимости переменной внутри и снаружи функции различна.
Внутри определения функции она имеет собственную область видимости при назначении новых переменных.
Если вы намереваетесь переназначить глобальную переменную, Вы должны использовать оператор global.

global x

Этот оператор означает

Когда я назначаю переменную в этой области функций, это не область функций, а глобальная область

Обратите внимание, что речь идет только о назначении , поэтому вам не нужно global оператор использовать глобальные переменные.
В дополнение В большинстве случаев переназначение глобальной переменной не очень хорошая идея, поскольку она усложняет ваш код. Существует так много альтернатив.
Но, тем не менее, вы хотите сделать это, вы можете:

x = "glob"
def reg():
    global x

    print(x)
    x = "loc"
    print(x)
reg()

И, что касается первого примера,
Переназначение аргумента в функции не влияет за пределы функции .

0 голосов
/ 01 марта 2020

Вы можете посетить https://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html. Есть пример по вашей проблеме.

...