Python 3,全局变量,模块

时间:2018-06-26 22:10:51

标签: python python-3.x module global

如何将此代码移至模块中的函数? 我有全局变量'last_msg'和'fake'。我试图在函数中对'last_msg'使用'global',但是由于在模块中起作用,而在主作用域中使用'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 :(得分:2)

link提供了一些有关如何访问全局变量以及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)

答案 1 :(得分:0)

似乎我已经做到了。

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