В Python, как лучше всего эмулировать Perl __END__? - PullRequest
23 голосов
/ 18 марта 2010

Правильно ли я считаю, что этот Python не имеет прямого эквивалента для Perl __END__?

print "Perl...\n";

__END__
End of code. I can put anything I want here.

Одна мысль, которая пришла мне в голову, заключалась в использовании строки в тройных кавычках. Есть ли лучший способ добиться этого в Python?

print "Python..."

"""
End of code. I can put anything I want here.
"""

Ответы [ 6 ]

17 голосов
/ 22 февраля 2011

Блок

__END__
в perl датируется тем временем, когда программистам приходилось работать с данными из внешнего мира, и им нравилось хранить их примеры в самой программе.

Трудно представить, я знаю.

Это было полезно, например, если у вас была движущаяся цель, такая как файл журнала оборудования с изменяющимися сообщениями, из-за обновлений прошивки, где вы хотели сравнить старые и новые версии линии или хранить записи, не связанные строго с программами операции («Код кажется медленным в день x месяца каждого месяца») или, как упоминалось выше, эталонный набор данных для запуска программы. Телекоммуникационные компании являются примером отрасли, где это было частым требованием.

Наконец, культ Python, подобный ограничению, кажется, оказывает реальное и утомительное влияние на мышление его сторонников, если ваш единственный ответ на вопрос: «Зачем вам это нужно, когда вы можете делать X?» когда X не так полезен, пожалуйста, помолчи ++.

7 голосов
/ 18 марта 2010

Форма тройных кавычек, которую вы предложили, все равно создаст строку python, тогда как парсер Perl просто игнорирует что-либо после __END__. Вы не можете написать:

"""
I can put anything in here...
Anything!
"""
import os
os.system("rm -rf /")

Комментарии более подходящие на мой взгляд.

#__END__
#Whatever I write here will be ignored
#Woohoo !
5 голосов
/ 18 марта 2010

То, что вы просите, не существует.Доказательство: http://www.mail-archive.com/python-list@python.org/msg156396.html

Простое решение состоит в том, чтобы избежать любого «как \» и сделать обычную многострочнуюстрока - см. официальные документы: http://docs.python.org/tutorial/introduction.html#strings

(Кроме того, atexit не работает: http://www.mail-archive.com/python-list@python.org/msg156364.html)

2 голосов
/ 13 сентября 2012

Хм, а как же sys.exit(0)? (конечно, при условии, что вы на import sys выше)

Относительно того, почему это было бы полезно, иногда я сажусь, чтобы что-то существенно переписать, и хочу пометить мое место "хорошо до этого момента".

При временном использовании sys.exit(0) я не знаю, что ниже этой точки будет выполняться, поэтому, если есть проблема (например, ошибка сервера), я знаю, что должен был быть выше этой точки.

Мне нравится это немного лучше, чем комментировать оставшуюся часть файла, просто потому, что больше шансов ошибиться и раскомментировать что-либо (нажатие случайной клавиши в начале строки), а также потому, что кажется, что лучше вставить 1 строку (который будет позже удален), чем модифицировать X-многие строки, которые потом придется модифицировать позже.

Но да, это расщепление волос; комментирование тоже отлично работает ... при условии, что ваш редактор поддерживает легкое комментирование региона; если нет, то sys.exit(0) полностью!

0 голосов
/ 03 мая 2019

Я все время использую __END__ для кратных приведенных причин. Я делал это так долго, что поставил (обычно перед exit('0');) вместе с подпрограммами BEGIN {} / END{} в силу привычки. Жаль, что у Python нет эквивалента, но я просто закомментировал строки внизу: посторонние, но это примерно то, что вы получаете с одним способом управлять всеми этими языками .

0 голосов
/ 18 марта 2010

Python не имеет прямого эквивалента этому.

Зачем тебе это? Это не очень хорошая вещь, когда есть более последовательные способы, например, помещать текст в конце в виде комментариев (именно так мы включаем произвольный текст в исходные файлы Python. Строки с тройными кавычками предназначены для создания многострочных строк, не для текста, не связанного с кодом.)

Ваш редактор должен быть в состоянии упростить использование многих строк комментариев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...