Python: Что означает "foo() для я в диапазоне (бар)"?
Что означает следующий оператор в Python?
randrange(10**10) for i in range(100)
Я знаю, что randrange является генератором случайных чисел, но не может действительно понять эффект выражения.
Ответ 1
Как вы его разместили, это SyntaxError.
Но я думаю, что это утверждение находится внутри []. Затем это понимание списка, которое создает список, содержащий 100 случайных чисел. Это эквивалентно этому коду:
whatever = []
for i in range(100):
whatever.append(randrange(10**10))
Если код находился внутри () вместо [], это было бы выражение генератора, т.е. итеративный, элементы которого не создаются немедленно, но по требованию.
Ответ 2
Само по себе это будет синтаксическая ошибка. В скобках заключено выражение генератора:
(randrange(10**10) for i in range(100))
возвращает генератор, который будет давать результаты 100 вызовов randrange(10**10) по одному за раз.
возвращает список из 100 номеров, полученных в результате вызова randrange(10**10).
Преимущество выражения генератора над пониманием списка заключается в том, что он оценивается лениво, поэтому вам не нужно создавать и хранить весь список в памяти (что особенно важно для очень больших, возможно, бесконечных генераторов).