如何使 Python telebot 模块中函数外部的变量在没有“全局”的情况下在其内部工作?

问题描述 投票:0回答:1

我在

addon
之外的代码中定义了一个变量 (
def()
),以便在代码的其他部分使用它。我需要检查它是
True
还是
False
,如果那里是
True
,请将其更改为
False
。但是,
if
不起作用,当我将
addon
更改为
True
时,会出现错误:
addon
addon
之外的另一个
def()
相呼应,而
addon
中的
if
则不工作被定义。 代码本身:

import telebot
from telebot import types


addon = False


@bot.message_handler(commands=['function'])
def func1(message):
    if addon is False:
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.InlineKeyboardButton('Button1', callback_data='Button1')
        markup.add(button1)
        button2 = types.InlineKeyboardButton('Button2', callback_data='Button2')
        markup.add(button2)
        bot.send_message(message.chat.id, 'Message text', reply_markup=markup)
        addon = True

我尝试过:

  • 使用
    global
    ,但它改变了所有用户的变量,这不好。
  • addon
    放在
    def
    之后
    message
    ,也不起作用
  • 使用0和1(
    +=
    -=
    )代替
    True
    False
    ,错误并没有消失
  • 点击“忽略错误”,它就是不起作用
python telegram telegram-bot python-telegram-bot telebot
1个回答
0
投票

通常我会向函数添加另一个参数,然后在函数执行时传递它的值,如下所示:


addon = False 

def func1(message, addon): 
    ...

func1(message="hello world", addon=addon)

但是如果这是不可能的,那么您可以使用

globals()
函数,它返回全局范围内定义的所有对象的字典。然后您可以执行以下操作:


addon=False 

def func1(message): 
   addon = globals()['addon']
   ...
© www.soinside.com 2019 - 2024. All rights reserved.