从python中的异步函数修改全局变量

Mát*_*rga 1 python asynchronous python-3.x discord.py

我正在使用 discord.py 在 Python 中制作一个 Discord 机器人。我想从异步线程设置/修改全局变量。

message = ""

@bot.command()
async def test(ctx, msg):
    message = msg
Run Code Online (Sandbox Code Playgroud)

然而这行不通。我怎样才能做到这一点?

Pra*_*enB 7

正如我在评论中所说,无论在何处修改全局变量,都必须在函数中使用关键字 global。如果您只是在功能上阅读它,那么您不需要它。

message = ""

@bot.command()
async def test(ctx, msg):
    global message
    message = msg
Run Code Online (Sandbox Code Playgroud)

  • 虽然有效,但这实际上并不是 OP 问题的正确答案。OP 希望从内部作用域函数修改外部作用域变量。虽然可以使用 global,但它不一定是正确的答案:如果变量不应该是全局的而只能在所需范围内可变怎么办?答案是使用可变类型 - dict、数组等,而不是 str。Python 的作用域遮蔽规则对于来自其他语言的人来说并不直观。 (2认同)