代码之家  ›  专栏  ›  技术社区  ›  Santiago Quiroga

访问不一致命令之间的变量。py公司

  •  1
  • Santiago Quiroga  · 技术社区  · 7 年前

    我有一个(过于简化的)Discord机器人

    voting_enabled = False
    
    @bot.command()
    async def start():
        voting_enabled = True
    
    @bot.command()
    async def finish():
        voting_enabled = False
    
    @bot.command()
    async def vote():
        if voting_enabled:
            # Do something
        else:
            # Do something else
    

    问题所在

    当我打电话给 vote() 命令,它总是遍历代码的else部分。即使在打电话给 start() 命令

    我想要实现的目标

    我希望 投票() 命令的行为不同,这取决于之前调用的其他两个命令

    我试过的

    我试着用 global 第一行有这样的关键字

    global voting_enabled
    voting_enabled = False
    

    但它什么也没做

    2 回复  |  直到 7 年前
        1
  •  15
  •   Licht    5 年前

    除非不要使用globals,因为它们很臭。不一致py有另一种方法可以做到这一点。

    bot.voting_enabled = False
    
    @bot.command()
    async def start():
        bot.voting_enabled = True
    
    @bot.command()
    async def finish():
        bot.voting_enabled = False
    
    @bot.command()
    async def vote():
        if bot.voting_enabled:
            # Do something
        else:
            # Do something else
    
        2
  •  4
  •   Santiago Quiroga    7 年前

    这个 global 关键字使用不正确。

    全球的 应在每个函数中定义。

    例子:

    voting_enabled = False
    
    @bot.command()
    async def start():
        global voting_enabled
    
        voting_enabled = True
    
    @bot.command()
    async def finish():
        global voting_enabled
    
        voting_enabled = False
    
    @bot.command()
    async def vote():
        global voting_enabled
    
        if voting_enabled:
            # Do something
        else:
            # Do something else