Есть что-то похожее на __END__ perl в python? [Дубликат]

Я собираюсь дать несколько простых функций для вычисления области многоугольника 2d. Это работает как для выпуклых, так и для вогнутых многоугольников. мы просто делим многоугольник на множество подтреугольников.

//don't forget to include cmath for abs function
struct Point{
  double x;
  double y;
}
// cross_product
double cp(Point a, Point b){ //returns cross product
  return a.x*b.y-a.y*b.x;
}

double area(Point * vertices, int n){  //n is number of sides
  double sum=0.0;
  for(i=0; i<n; i++){
    sum+=cp(vertices[i], vertices[(i+1)%n]); //%n is for last triangle
  }
  return abs(sum)/2.0;
}
22
задан Tadeusz A. Kadłubowski 18 March 2010 в 18:26
поделиться

5 ответов

Предлагаемая тройная цитата по-прежнему создает строку 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 !
7
ответ дан S.Lott 19 August 2018 в 05:54
поделиться
  • 1
    @Lott: вы можете поместить что-нибудь после __END__ perl, включая perl-код, больше __END__ токенов, буквально ничего .. Вы не можете поместить нечетное количество трипсовых кавычек в строку трифонического питона (если вы не помните, чтобы ее избежать). Если вы поместите четное количество триплексных котировок и некоторый код python, он будет выполнен. – Tadeusz A. Kadłubowski 18 March 2010 в 18:34
  • 2
    Более ясный пример, чем предыдущая версия этого ответа. – S.Lott 18 March 2010 в 18:48
  • 3
    «Парсер Perl просто игнорирует что-либо после __END__». На самом деле, нет. Дескриптор файла DATA может получить доступ ко всем после __END__. – Alan Haggai Alavi 13 April 2011 в 10:12

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

Что касается того, почему это было бы полезно, иногда я сажусь, чтобы сделать существенное переписывание чего-либо и хочу отметить свою «хорошую до этого момента», place.

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

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

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

2
ответ дан Chirael 19 August 2018 в 05:54
поделиться
  • 1
    Проблема с sys.exit(0) - это все, что ниже, которое все еще обрабатывается интерпретатором Python, и SyntaxError возникает, если у него нет действительного синтаксиса. – pts 1 September 2017 в 17:18

Блок

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

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

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

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

15
ответ дан Micheal Lunny 19 August 2018 в 05:54
поделиться
  • 1
    Когда «есть только один способ сделать это», иногда нет никакого способа сделать это. – Joel Berger 22 February 2011 в 17:23
  • 2
    Python - прекрасный язык, но его философия дизайна иногда пересекает границу между инновационными и реакционными. – Micheal Lunny 25 February 2011 в 18:22

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

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

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

0
ответ дан Mike Graham 19 August 2018 в 05:54
поделиться
  • 1
    Иногда, когда вы пишете код, полезно прокомментировать раздел кода, который еще не работает, и Perl притворяется, что код не существует. – Brad Gilbert 31 July 2011 в 19:02
  • 2
    Просто потому, что вы не можете думать о причине использовать его, не означает, что нет причины. – Brad Gilbert 31 July 2011 в 19:05
  • 3
    @Brad, комментарий кода может быть очень неустойчивым и часто указывает, что кто-то неправильно использует их редактор или систему контроля версий. Если кто-то действительно хочет комментировать большую часть кода, любой разумный текстовый редактор делает это простым. Какие многострочные строки не комментируют вообще, и я видел, что это действительно вызывает проблемы для людей, которые написали код, действующий так, как они есть. – Mike Graham 2 August 2011 в 19:56
  • 4
    Вы заметите, я не утверждал, что причин нет; на самом деле я попросил причину. Только, дойдя до настоящей проблемы, мы сможем получить оптимальное решение. – Mike Graham 2 August 2011 в 19:57
  • 5
    Почему? Я хочу этого? Я хочу это, потому что полезно иметь блок текста, документирующий использование программы внутри программы (это не достойно собственного файла), и я не могу представить хороший способ сказать парсеру просто прямо / IGNORE / все персонажи, с которыми он никогда не должен взаимодействовать. Ключевое слово __ END __ или, по крайней мере, прекращение дальнейшего сканирования синтаксиса при вызове exit (), который всегда доступен для достижения. – Michael J. Evans 2 March 2016 в 23:56

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

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

(Кроме того, atexit doesn ' t work: http://www.mail-archive.com/python-list@python.org/msg156364.html )

5
ответ дан Simon B. 19 August 2018 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: