Все больше функций Python переходят в «ленивый исполняемый файл», например, генератор и другие итераторы. Иногда, однако, я вижу, что хочу бросить петлю «за», чтобы выполнить какое-то действие.Что такое самый питонический способ выполнения выражения генератора?
Какова была бы самая пифоническая вещь, чтобы получить цикл, фактически выполненный?
Например:
a = open("numbers.txt", "w")
(a.write ("%d " % i) for i in xrange(100))
a.close()
Не actuall код, но вы видите, что я имею в виду. Если я использую генератор списков, вместо этого у меня есть побочный эффект создания списка N-длины, заполненного «Нет».
В настоящее время я использую выражение как аргумент в вызове «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
"N-образный список, заполненный монахинями.« –
Просто уточнить: я редко использую подобные вещи в производственном кодексе - и, учитывая реакцию здесь, я, вероятно, полностью остановлюсь. Но мне нравится веселиться, накладывая однострочные вещи (хотя они неряшливы по своей природе) - есть где я пропустил это больше всего. Только вчера я прошел большую попытку, чтобы получить однострочный шрифт для метода списка рубинов 1.9.2 «chunck» (однострочная версия сосала - но одна дополнительная строка, объявляющая словарь перед тем, как «исполняемый генератор» дает Python что-то приятнее, чем вещь «chunck») – jsbueno
@Nas: Остановить случайное обвинение людей в вещах, которые они не делали. –