Присвоить глобальную переменную локальной переменной функции - PullRequest
0 голосов
/ 06 июня 2018

Я хочу перебрать некоторую глобальную переменную i и каждый раз компилировать новую функцию, которая использует мгновенное значение i.Затем я могу использовать каждую из этих функций в будущем, независимо от текущего значения i.

Проблема в том, что я не могу найти хороший способ заставить глобальную переменную i оставаться локальной в пространстве имен функции.Например:

i = 0

def f():
    return i

i = 1

print(f()) #Prints 1, when I want 0

Я нашел одно решение, но оно кажется очень неуклюжим:

i = 0

def g(x):
    def h():
        return x
    return h

f = g(i)
i = 1

print(f()) #Prints 0 as I wanted.

Есть ли лучший способ сделать это, может быть, какой-то декоратор?

1 Ответ

0 голосов
/ 06 июня 2018

Python-функции являются объектами, для них можно установить атрибут:

i = 0

def f():
    return f.i

f.i = i

i = 1

print(f()) # Prints 0 as you wanted

или:

for i in range(5):
    f.i = i
    print(f())

Обратите внимание, что аргумент будет делать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...