Предположим, у меня есть функция с побочными эффектами (в этом примере побочный эффект заключается в том, что что-то напечатано). Существует ли какая-либо версия any () или какая-либо конструкция итеративного списка, которая НЕ будет вызывать побочные эффекты после нахождения истинного результата?
Например, предположим, что эта функция:
def a(x):
print("A function got: " + str(x))
return x == 2
Можно было бы надеяться , что этот вызов поможет. Конечно, он не:
any([
a(i) for i in range(5)
])
Какие отпечатки:
A function got: 0
A function got: 1
A function got: 2
A function got: 3
A function got: 4
Но я бы хотел напечатать это вместо:
A function got: 0
A function got: 1
A function got: 2
Почему? Range является итерируемым, понимание списка создает итерируемое, я бы ожидал, что Python объединит их в цепочку и прекратит выполнение целиком, как только функция any () перестанет потреблять, что она должна сделать, как только достигнет Первый Истинный.
Что я неправильно понимаю? Какая версия этого будет вести себя таким образом, если таковая имеется?