Python 3, глобальные переменные, модули - PullRequest
0 голосов
/ 27 июня 2018

как я могу переместить этот код в функцию в модуле? У меня есть глобальные переменные «last_msg» и «поддельные». Я пытался использовать «global» для «last_msg» в своей функции, но это выходит за рамки, потому что функция в модуле, а «last_msg» в основной области.

main.py

from module import Timeout

last_msg = {'Foo': 0}
name = 'Foo'
fake = False
timeout = 3

fake = Timeout(fake, name, timeout)

>> NameError: name 'last_msg' is not defined

<>

module.py

def Timeout(fake, name, timeout):
    global last_msg

    if not fake:
        if name not in last_msg:
            last_msg[name] = 0

        if last_msg[name] > 0:
            last_msg[name] -= 1
            fake = True
        else:
            last_msg[name] = timeout
    else:
        if name in last_msg:
            last_msg[name] = 0

    return fake

Ответы [ 2 ]

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

Эта ссылка содержит некоторую информацию о том, как вы можете получить доступ к глобальным переменным и как Python обрабатывает глобальные переменные. Для этого код будет:

module.py
def Timeout(fake, name, timeout):
    import main

    if not fake:
        if name not in main.last_msg:
            main.last_msg[name] = 0

        if main.last_msg[name] > 0:
            main.last_msg[name] -= 1
            fake = True
        else:
            main.last_msg[name] = timeout
    else:
        if name in main.last_msg:
            main.last_msg[name] = 0

    return fake

и main.py будет выглядеть так:

last_msg = {'Foo': 0}
from module import Timeout

# last_msg = {'Foo': 0}
name = 'Foo'
fake = False
timeout = 3

fake = Timeout(fake, name, timeout)
0 голосов
/ 27 июня 2018

Кажется, я это сделал.

main.py

from module import Timeout

last_msg = {'Foo': 0}
name = 'Foo'
fake = False
timeout = 3

fake, last_msg = Timeout(fake, name, last_msg, timeout)

<>

module.py

def Timeout(fake, name, last_msg, timeout):
    if not fake:
        if name not in last_msg:
            last_msg[name] = 0

        if last_msg[name] > 0:
            last_msg[name] -= 1
            fake = True
        else:
            last_msg[name] = timeout
    else:
        if name in last_msg:
            last_msg[name] = 0

    return fake, last_msg
...