Все больше и больше функций Python становятся «ленивыми исполняемыми файлами», подобно выражениям генератора и иным видам итераторов.Иногда, однако, я вижу себя желающим накатить цикл «для» в одну строку, просто чтобы выполнить какое-то действие.
Что было бы наиболее питоническим, чтобы фактически выполнить цикл?
Например:
a = open("numbers.txt", "w")
(a.write ("%d " % i) for i in xrange(100))
a.close()
Не актуальный код, но вы понимаете, о чем я.Если вместо этого я использую генератор списков, у меня будет побочный эффект создания списка N-длины, заполненного "None".
В настоящее время я использую выражение в качестве аргумента в вызове.«любому» или «всему».Но я хотел бы найти способ, который не зависел бы от результата выражения, выполненного в цикле - и «any», и «all» могут останавливаться в зависимости от вычисляемого выражения.
Для ясности, этиЕсть способы сделать это, о которых я уже знаю, и у каждого есть свои недостатки:
[a.write ("%d " % i) for i in xrange(100))]
any((a.write ("%d " % i) for i in xrange(100)))
for item in (a.write ("%d " % i) for i in xrange(100)): pass