Как сослаться на локальный модуль в Python? - PullRequest
3 голосов
/ 02 декабря 2009

Допустим, у нас есть модуль m:

var = None

def get_var():
    return var

def set_var(v):
    var = v

Это не будет работать должным образом, потому что set_var() не будет хранить v в модуле var. Вместо этого будет создана локальная переменная var.

Поэтому мне нужен способ обращения к модулю m изнутри set_var(), который сам является членом модуля m. Как мне это сделать?

Ответы [ 3 ]

10 голосов
/ 02 декабря 2009
def set_var(v):
    global var
    var = v

Ключевое слово global позволит вам изменять глобальные переменные изнутри функции.

9 голосов
/ 02 декабря 2009

Как показывает ответ Джеффри Эйлсворта , на самом деле вам не нужна ссылка на локальный модуль для достижения цели ОП. Ключевое слово global может достичь этой цели.

Однако для ответа на заголовок OP, Как обратиться к локальному модулю в Python? :

import sys

var = None

def set_var(v):
    sys.modules[__name__].var = v

def get_var():
    return var
3 голосов
/ 02 декабря 2009

В дополнение к ответу Джеффри я хотел бы добавить, что в Python 3 вы можете получить более общий доступ к переменной из ближайшей охватывающей области:

def set_local_var():

    var = None

    def set_var(v):
        nonlocal var  
        var = v

    return (var, set_var)

# Test:
(my_var, my_set) = set_local_var()
print my_var  # None
my_set(3)
print my_var  # Should now be 3

(Предостережение: я не проверял это, поскольку у меня нет Python 3.)

...