在Python中从异步函数修改全局变量

10

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

message = ""

@bot.command()
async def test(ctx, msg):
    message = msg

然而,这并不起作用。我该如何实现这样的功能?

你所说的“它不起作用”具体是什么意思?在另一个函数中,你在测试中设置的值没有反映出来吗?全局变量应该在异步函数中可用,并且该值将会改变。很可能在其他地方被覆盖了。 - PraveenB
这个回答解决了你的问题吗?在函数中使用全局变量 - Ture Pålsson
@TurePålsson 感谢您指出这一点,显然在所有函数中无论何时更改它,您都必须使用关键字global。 - PraveenB
1个回答

20

正如我在评论中所说的,您必须在修改全局变量的函数中使用关键字global。如果您只是在函数中读取它,则不需要使用它。

message = ""

@bot.command()
async def test(ctx, msg):
    global message
    message = msg

2
虽然有效,但这实际上并不是 OP 问题的正确答案。OP 想要从内部作用域函数修改外部作用域变量。虽然可以使用全局变量,但这并不一定是正确的答案:如果变量不应该是全局的,而只能在所需范围内可变呢?答案是使用可变类型 - 字典、数组等,而不是字符串。Python 的作用域遮蔽规则对于来自其他语言的人来说是非直观的。 - verveguy
1
我同意有不同的方法可以修改外部作用域变量,但OP的问题直接说明他想修改全局变量。我的答案是基于提供的代码片段。 - PraveenB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接