С gen
, oups
- это просто свободная переменная, поиск которой никогда не происходит; any
прекращает использование генератора, возвращенного gen
, прежде чем это станет необходимым.
При iter([False, True, oups])
, однако, сначала необходимо полностью создать список [False, True, oups]
, чтобы его можно было передать в iter
чтобы вернуть список итератор. Чтобы сделать то, что , должен произойти поиск oups
, и поскольку он не определен, мы получаем NameError
до iter
, не говоря уже о any
, даже работающем. Второй код оценивается так же, как
t1 = [False, True, oups] # NameError here
t2 = iter(t1)
if any(t2):
print('At least one is True')