Подтвердить что ты не робот

Синтаксис для вызова случайной функции из списка

Из этой темы: Как выполнить случайное событие в Python, выбрав произвольную переменную?

Я узнал, что можно добавить некоторые функции в список и с помощью random.choice() вызвать один из них для генерации случайного события.

Мне интересно это сделать, потому что я пишу довольно маленькую текстовую игру как часть учебника для начинающих.

Но когда я пишу то, что, как я думаю, даст мне желаемый результат (т.е. только одну из вызываемых функций и печать ее строки:

import random

def func_test_1():
    print "This is func_test_1."

def func_test_2():
    print "This is func_test_2."

def func_test_3():
    print "This is func_test_3."

my_list = [func_test_1(), func_test_2(), func_test_3()]

random.choice(my_list)

Получаю этот результат:

C:\Windows\system32\cmd.exe /c python random_func.py

This is func_test_1.

This is func_test_2.

This is func_test_3.

Hit any key to close this window...

Все три функции вызываются и печатаются.

Может ли кто-нибудь помочь мне с правильным синтаксисом для этого? Спасибо.

4b9b3361

Ответ 1

С круглыми скобками вы вызываете функцию. Вы хотите назначить их списку и вызывать выбор позже:

my_list = [func_test_1, func_test_2, func_test_3]
random.choice(my_list)()

Ответ 2

Во-первых, когда вы выполняете my_list = [func_test_1(), func_test_2(), func_test_3()], вы сохраняете результаты функции, а не функции в списке. Вместо этого сделайте my_list = [func_test_1, func_test_2, func_test_3], а затем вызовите случайную функцию. Вот так:

my_list = [func_test_1, func_test_2, func_test_3]
random.choice(my_list)()

Ответ 3

Функции - это объекты в Python.

Если вы ссылаетесь на них просто по их имени (без круглых скобок, которые действительно вызывают функцию!), вы ссылаетесь на основные объекты функции. Вы можете повторно связать их, проверить их.. или сохранить ссылку на них в списке.

mylist = [test_func_1,test_func_2,..]

В этот момент ни одна из функций не была выполнена. Затем вы можете использовать random.choice для выбора функции из списка и вызвать ее с помощью ():

  • mylist[0]() вызывает первую функцию в списке
  • random.choice(mylist)() вызывает случайную функцию