Я бы использовал модуль itertools
.
>>> from itertools import islice, imap, repeat
>>> from random import randint
>>> diceType = 5
>>> list(islice(imap(random.randint, repeat(1), repeat(diceType)), 5))
[5, 5, 4, 5, 4]
repeat
создает бесконечные последовательности из 1 с и diceType
с.imap
создает бесконечную последовательность результата вызова randint(1, diceType)
(каждый вызов получает следующее значение repeat(1)
и repeat(diceType)
в качестве аргумента. islice
создает конечный итератор, который принимает только первые 5 элементовбесконечная последовательность, и list
фактически принимает значения от конечного итератора.
В тех же строках, без использования itertools
, следующее (для простоты используется версия Python 2 map
):
map(lambda f: f(1, diceType), [randint]*5)
Это создает список с 5 отдельными ссылками на randint
, затем сопоставляет функцию, которая вызывает свои аргументы на 1 и diceType
, с этим списком.
(На самом деле, *Версия 1024 * может быть упрощена с использованием того же подхода:
list(islice(map(lambda f: f(1, diceType), repeat(randint)), 5))
)