Сначала немного предыстории, чтобы вы знали, что я пытаюсь сделать. Я создаю произносимый генератор слов. Чтобы сделать слова произносимыми, только некоторые наборы букв могут следовать за членами другого набора букв. Например, слово не может начинаться с «dtb». Это было достаточно легко реализовать с помощью строки операторов if для добавления буквы, если в слове выполняются условия. Однако, поскольку это генератор случайных слов, я хотел бы рандомизировать порядок, в котором выполняются операторы if / elif. Я подумал, что наилучшим способом было бы иметь список функций (где каждая функция представляет оператор или правило if). ), перемешайте список и выполняйте итерацию до тех пор, пока не будет выполнено условие. Это может быть достигнуто путем явного определения функций, как показано ниже для каждого правила:
string = ''
def rule1():
string += random_letter
if string[0] in letter_set_A:
string += random_from_letter_set_B
return string
Однако я бы предпочел не делать этого, так как в итоге получилось бы более десятка явных функций, связанных с именами, которые мне не нужны. Я посмотрел дальше на лямбды, чтобы сделать неявные функции в списке, но они не поддерживают назначения, как я использую выше.
Возможно ли создать список сложных функций, подобных приведенным выше, которые можно вызывать в формате my_list[i]()
без их явного определения? Если нет, как я могу рандомизировать порядок выполнения операторов if / elif?