Python: Что означает "foo() для я в диапазоне (бар)"? - программирование
Подтвердить что ты не робот

Python: Что означает "foo() для я в диапазоне (бар)"?

Что означает следующий оператор в Python?

randrange(10**10) for i in range(100)

Я знаю, что randrange является генератором случайных чисел, но не может действительно понять эффект выражения.

4b9b3361

Ответ 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) по одному за раз.

Внутри квадратных скобок это понимание списка:

[randrange(10**10) for i in range(100)]

возвращает список из 100 номеров, полученных в результате вызова randrange(10**10).

Преимущество выражения генератора над пониманием списка заключается в том, что он оценивается лениво, поэтому вам не нужно создавать и хранить весь список в памяти (что особенно важно для очень больших, возможно, бесконечных генераторов).