Расширить область действия локальной переменной до глобальной переменной - PullRequest
0 голосов
/ 14 декабря 2018

В python мы можем объявить глобальную переменную, которая будет доступна другим функциям.

my_global_var = 2

# foo can only access the variable for reading
def foo():
    print(my_global_var)

# bar can also write into the global variable
def bar():
    global my_global_var
    print(my_global_var)

Это работает, однако предположим, что я не хочу создавать глобальную переменную вне foo и bar, но вместо этого я хочу foo создать локальную переменную и расширить область действия этой переменной до бара (и любой другой функции), не передавая ее в качестве параметра.

Что-то вроде

def foo():
    # the scope of this variable is only foo. Can I make it global?
    my_global_var = 4  

# bar wants to be able to access (and maybe modify) the variable created by foo
def bar():
    global my_global_var
    print(my_global_var)

PD: Что касается комментариев, я думаю, что мой вопрос не понят.

Это явно не дубликат этого другого вопроса, поскольку я знаю, как использовать глобальные переменные (первый пример в вопросе использует их).

И я также не прошу предложений о передаче переменных в качестве параметров или об использовании глобальных переменных.

Мой вопрос очень специфический.Могу ли я расширить область действия локальной переменной в глобальную переменную?

Это либо да, это можно сделать таким образом, либо нет, этого нельзя сделать.И если ответ «да», я хотел бы знать, как это можно сделать.

1 Ответ

0 голосов
/ 14 декабря 2018

Существует множество способов обойти это и отчасти подражать этому, но на самом деле ... Нет, нет способа сделать именно это .

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

...