asyncio:任务中全局变量的非常奇怪的处理

asyncio : very strange handling of global variables within tasks

如果此函数 运行 作为 asyncio 中的任务:

async def test():
    x = "strange"
    while True:
        def myfunc():
            global x
            x = "expected"
        myfunc()
        print("This is " + x)
        await asyncio.sleep(1)


loop.create_task(test())
loop.run_forever()

我希望“这是预期的”,与任何普通 python 应用程序相同的结果......但是相反......它打印“这很奇怪”......为什么?

问题与asyncio无关。

global xx 变量链接到模块级对象,而不是 test 函数。

改为使用 nonlocal x 以使代码按预期工作。