Комментарии Python в стиле HTML

Содержание

Вступление
Требования
Правила оформления html-кода
Запуск
Недостатки и сфера применения

Вступление

Инструменты, о которых здесь пойдет речь, обязаны свои появлением моему желанию публиковать в Интернете не только свои научные статьи, но и тексты программ обработки данных. При этом хотелось, чтобы код легко понимался не только его автором. Как ни странно, готового решения, устраивающего во всех отношениях, найти не удалось.

Каждый, кто когда-нибудь пытался запускать скачанные из Интернета в виде html-страниц сценарии Python, знает, сколько усилий порой приходится прилагать, чтобы восстановить правильное оформление кода Python.

С другой стороны, классически оформленные программы в виде кода с простыми текстовыми комментариями слишком аскетичны. Где возможности для выделения текста курсивом, изменения размера шрифта, где гиперссылки, таблицы, формулы и иллюстрации? Встроенные в текст программы текстовые комментарии более приспособлены для компилятора/интерпретатора, чем для человека-программиста. И требования к идеальной программе в наши дни должны включать в себя не только структурированность, кроссплатформенность, открытость кода и т.п., но и легкость восприятия кода. Особенно это касается образцовых, учебных программ.

В свое время для решения этой задачи была разработана особая концепция "литературного программирования" (вольный перевод оригинального термина "literate programming" - методология программирования и документирования, согласно которой код должен писаться таким образом, чтобы он был понятен людям, читающим его; разработана Дональдом Кнутом в 1981 году при создании системы компьютерной верстки TeX). В ней для облегчения понимания программного кода человеком вводилась система макросов, создаваемая из фраз на человеческом языке, которые становились своего рода "метаязыком" над конкретным языком программирования.

К сожалению, на практике применение этой красивой идеи столкнулось с рядом проблем.

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

Использование метаязыка, каким бы интуитивно простым он ни был, означает, что нужно изучить еще один язык (или псевдо-язык) программирования. (То же относится и к облегченным языкам разметки, таким как Markdown, Textile и т.п.) Кроме того, он становится дополнительным посредником между человеком и кодом. И того, и другого мне хотелось бы избежать.

Кажется, именно по этим причинам литературное программирование и не получило широкого распространения в программистской практике.

На наш взгляд, для понимания кода такого языка программирования как Python язык-посредник не нужен. Python и так достаточно прост. Также вполне легко читается написанная вручную html-разметка. Совмещение в рамках одного файла двух языков - Python для программного кода и HTML для комментариев - выглядит разумной и простой альтернативой литературному программированию.

Конечно, для большинства программ простые текстовые комментарии - это оптимальный вариант. Но есть ниши, в которых дополнительное оформление программного кода может быть оправданным. Речь идет, скажем, о программах с серьезным математическим и/или научным содержанием.

Предлагаются три простых инструмента для работы с файлами, в которых код Python совмещен с разметкой HTML:

Требования

Процедуры html2py(), py2html() и html2code() написаны на Python 2. В принципе, для их работы никаких дополнительных пакетов кроме стандартного дистрибутива Python не нужно. Но для того чтобы они корректно обрабатывали встроенные сценарии, в которых содержатся сочетания символов <CODE>…</CODE> и <code>…</code>, например сами себя, строковые переменные, содержащие эти сочетания, выведены в дополнительный микромодуль code_tag.py.

Правила оформления html-кода

Естественно, такие html-файлы должны быть оформлены по соответствующим правилам:

Запуск

Все три процедуры имеют четыре однотипных варианта запуска. Рассмотрим их на примере процедуры html2py():
html2py('',0,0)
холостой запуск: скрипт Python не создается, и код не запускается на выполнение
html2py('',0,1)
сценарий Python не создается, но код запускается на выполнение
html2py('',1,0)
генерируется скрипт Python, но код на выполнение не запускается
html2py('',1,1)
сценарий Python создается и запускается на выполнение
Процедура может использоваться в интерактивном режиме, когда пользователь сам находит нужный скрипт (в html-формате) в открывшемся диалоговом окне и запускает его на выполнение без создания промежуточного файла с расширением .py.

С другой стороны, процедура html2py может вызываться из других сценариев Python. В последнем случае имя html-файла с кодом задается через первый параметр этой процедуры.

Третий вариант - импортирование модуля, оформленного в виде html-файла. Тогда перед командой import имя_модуля в сценарии, использующем такой модуль, нужно вызвать процедуру с параметрами: html2py('имя_модуля',1,0).

Недостатки и сфера применения

У предлагаемого подхода к оформлению html-комментариев есть недостатки:

Тем не менее, на наш взгляд, у предлагаемого подхода есть своя ниша. Например, в научной практике встречаются ситуации, когда желательно публиковать не только итоговые результаты, но и методики их получения, лучше всего непосредственно сам программный код. В этом случае совмещение программного кода и html-разметки "в одном флаконе" себя оправдывает: можно написать научную статью с традиционными описаниями, формулами, таблицами, рисунками, содержащую в себе готовую программу обработки данных, и опубликовать ее в Интернете в виде одного текстового файла.

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

Очевидно, что простейший алгоритм, заложенный в процедуру html2code.py (которая удаляет все комментарии), может быть применен при небольшой доработке к программам практически на любом языке программирования.


Автор: Филипп Занько
Web-адрес: http://www.russianlutheran.org/python/python.html
Лицензия: Creative Commons Attribution-ShareAlike 3.0 Unported License

О своих предложениях, замеченных ошибках, неточностях, опечатках просьба сообщать по электронному адресу:
russianlutheran@gmail.com