Я пытаюсь сохранить функцию в списке, позже извлечь функцию из списка и затем вызвать эту функцию. Это в основном то, что я хочу сделать, без каких-либо подробностей. Это не показывает мою цель, но это та же проблема.
elements: list = [] # List meant to contain a tuple with the name of the item and the function of the item.
def quit_code():
exit()
element.append(("quit", quit_code))
Теперь, где-то еще в коде, я хочу иметь возможность использовать оператор if для проверки имени элемента и, если он правильный в то время, запустите функцию.
user_input = "quit" # For brevity, I'm just writing this. Let's just imagine the user actually typed this.
if elements[0][0] == user_input:
#This is the part I don't understand so I'm just going to make up some syntax.
run_method(elements[0][1])
Проблема заключается в методе run_method, который я произвольно выбрал. Мне нужен способ запуска метода, возвращаемого elements [0] [1], который является методом quit_code. Мне не нужно альтернативное решение для этого примера, потому что я просто придумал, чтобы показать, что я хочу сделать. Если у меня есть функция или объект, который содержит функцию, как я могу запустить эту функцию.
(проще всего я могу это произнести) Если у меня есть object_a (для меня это кортеж), содержащий str_1 и fun_b, как я могу запустить fun_b из объекта.
Чтобы немного подробнее остановиться на этом, я не могу просто напрямую вызвать функцию, потому что в моей программе Функция помещается в кортеж с помощью пользовательского ввода, создается локально и затем сохраняется в кортеже.
__list_of_stuff: list = []
def add_to_list(name, function):
__list_of_stuff.append((name, function))
А затем где-то еще
def example_init_method():
def stop_code():
exit()
add_to_list("QUIT", stop_code())
Теперь обратите внимание, что я не могу получить доступ метод stop_code где-либо еще в коде, если я не использую его с по объект __list_of_stuff.
Наконец, было бы неплохо не создавать функцию для ввода. Под этим я подразумеваю непосредственную вставку кода в параметр без создания локальной функции, такой как stop_code. Хотя я не знаю, как это сделать.