Роман Сузи - Язык программирования Python

Тут можно читать онлайн Роман Сузи - Язык программирования Python - бесплатно ознакомительный отрывок. Жанр: comp-programming. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Язык программирования Python
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.38/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Роман Сузи - Язык программирования Python краткое содержание

Язык программирования Python - описание и краткое содержание, автор Роман Сузи, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Курс посвящен одному из бурно развивающихся и популярных в настоящее время сценарных языков программирования — Python. Язык Python позволяет быстро создавать как прототипы программных систем, так и сами программные системы, помогает в интеграции программного обеспечения для решения производственных задач. Python имеет богатую стандартную библиотеку и большое количество модулей расширения практически для всех нужд отрасли информационных технологий. Благодаря ясному синтаксису изучение языка не составляет большой проблемы. Написанные на нем программы получаются структурированными по форме, и в них легко проследить логику работы. На примере языка Python рассматриваются такие важные понятия как: объектно–ориентированное программирование, функциональное программирование, событийно–управляемые программы (GUI–приложения), форматы представления данных (Unicode, XML и т.п.). Возможность диалогового режима работы интерпретатора Python позволяет существенно сократить время изучения самого языка и перейти к решению задач в соответствующих предметных областях. Python свободно доступен для многих платформ, а написанные на нем программы обычно переносимы между платформами без изменений. Это обстоятельство позволяет применять для изучения языка любую имеющуюся аппаратную платформу.

Язык программирования Python - читать онлайн бесплатно ознакомительный отрывок

Язык программирования Python - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Роман Сузи
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Концептуально существуют два пути обработки XML–документа: последовательная обработка и работа с объектной моделью документа.

В первом случае обычно используется SAX(Simple API for XML, простой программный интерфейс для XML). Работа SAX заключается в чтении источников данных (input source) XML–анализаторами (XML–reader) и генерации последовательности событий (events), которые обрабатываются объектами–обработчиками (handlers). SAX дает последовательный доступ к XML–документу.

Во втором случае анализатор XML строит DOM(Document Object Model, объектная модель документа), предлагая для XML–документа конкретную объектную модель. В рамках этой модели узлы DOM–дерева доступны для произвольного доступа,а для переходов между узлами предусмотрен ряд методов.

Можно применить оба этих подхода для формирования приведенного выше XML–документа.

С помощью SAX документ сформируется так:

import sys

from xml.sax.saxutils import XMLGenerator

g = XMLGenerator(sys.stdout)

g.startDocument()

g.startElement("expression", {})

g.startElement("operation", {"type": "+"})

g.startElement("operand", {})

g.characters("2")

g.endElement("operand")

g.startElement("operand", {})

g.startElement("operation", {"type": "*"})

g.startElement("operand", {})

g.characters("3")

g.endElement("operand")

g.startElement("operand", {})

g.characters("4")

g.endElement("operand")

g.endElement("operation")

g.endElement("operand")

g.endElement("operation")

g.endElement("expression")

g.endDocument()

Построение дерева объектной модели документа может выглядеть, например, так:

from xml.dom import minidom

dom = minidom.Document()

e1 = dom.createElement("expression")

dom.appendChild(e1)

p1 = dom.createElement("operation")

p1.setAttribute('type', '+')

x1 = dom.createElement("operand")

x1.appendChild(dom.createTextNode("2"))

p1.appendChild(x1)

e1.appendChild(p1)

p2 = dom.createElement("operation")

p2.setAttribute('type', '*')

x2 = dom.createElement("operand")

x2.appendChild(dom.createTextNode("3"))

p2.appendChild(x2)

x3 = dom.createElement("operand")

x3.appendChild(dom.createTextNode("4"))

p2.appendChild(x3)

x4 = dom.createElement("operand")

x4.appendChild(p2)

p1.appendChild(x4)

print dom.toprettyxml()

Легко заметить, что при использовании SAX команды на генерацию тегов и других частей выдаются последовательно, а вот построение одной и той же DOM можно выполнять различными последовательностями команд формирования узла и его соединения с другими узлами.

Конечно, указанные примеры носят довольно теоретический характер, так как на практике строить XML–документы таким образом обычно не приходится.

Анализ XML–документа

Для работы с готовым XML–документом нужно воспользоваться XML–анализаторами. Анализ XML–документа с порождением объекта класса Documentпроисходит всего в одной строчке, с помощью функции parse(). Здесь стоит заметить, что кроме стандартного пакета xmlможно поставить пакет PyXMLили альтернативные коммерческие пакеты. Тем не менее, разработчики стараются придерживаться единого API, который продиктован стандартом DOM Level 2:

import xml.dom.minidom

dom = xml.dom.minidom.parse("expression.xml")

dom.normalize()

def output_tree(node, level=0):

if node.nodeType == node.TEXT_NODE:

if node.nodeValue.strip():

print ". "*level, node.nodeValue.strip()

else: # ELEMENT_NODE или DOCUMENT_NODE

atts = node.attributes or {}

att_string = ", ".join(

["%s=%s " % (k, v) for k, v in atts.items()])

print ". "*level, node.nodeName, att_string

for child in node.childNodes:

output_tree(child, level+1)

output_tree(dom)

В этом примере дерево выводится с помощью определенной функции output_tree(), которая принимает на входе узел и вызывается рекурсивно для всех вложенных узлов.

В результате получается примерно следующее:

#document

. expression

. . operation type=+

. . . operand

. . . . 2

. . . operand

. . . . operation type=*

. . . . . operand

. . . . . . 3

. . . . . operand

. . . . . . 4

Здесь же применяется метод normalize()для того, чтобы все текстовые фрагменты были слиты воедино (в противном случае может следовать подряд несколько узлов с текстом).

Можно заметить, что даже в небольшом примере использовались атрибуты узлов: node.nodeTypeуказывает тип узла, node.nodeValueприменяется для доступа к данным, node.nodeNameдает имя узла (соответствует названию тега), node.attributesдает доступ к атрибутам узла. node.childNodesприменяется для доступа к дочерним узлам. Этих свойств достаточно, чтобы рекурсивно обойти дерево.

Все узлы являются экземплярами подклассов класса Node. Они могут быть следующих типов:

Название Описание Метод для создания
ELEMENT_NODE Элемент createElement(tagname)
ATTRIBUTE_NODE Атрибут createAttribute(name)
TEXT_NODE Текстовый узел createTextNode(data)
CDATA_SECTION_NODE Раздел CDATA
ENTITY_REFERENCE_NODE Ссылка на сущность
ENTITY_NODE Сущность
PROCESSING_INSTRUCTION_NODE Инструкция по обработке createProcessingInstruction(target, data)
COMMENT_NODE Комментарий createComment(comment)
DOCUMENT_NODE Документ
DOCUMENT_TYPE_NODE Тип документа
DOCUMENT_FRAGMENT_NODE Фрагмент документа
NOTATION_NODE Нотация

В DOM документ является деревом, в узлах которого стоят объекты нескольких возможных типов. Узлы могут иметь атрибуты или данные. Доступ к узлам можно осуществлять через атрибуты вроде childNodes(дочерние узлы), firstChild(первый дочерний узел), lastChild(последний дочерний узел), parentNode(родитель), nextSibling(следующий брат), previousSibling(предыдущий брат).

Выше уже говорилось о методе appendChild(). К нему можно добавить методы insertBefore(newChild, refChild)(вставить newChildдо refChild), removeChild(oldChild)(удалить дочерний узел), replaceChild(newChild, oldChild)(заметить oldChildна newChild). Есть еще метод cloneNode(deep), который клонирует узел (вместе с дочерними узлами, если задан deep=1).

Узел типа ELEMENT_NODE, помимо перечисленных методов «просто» узла, имеет много других методов. Вот основные из них:

tagName

Имя типа элемента.

getElementsByTagName(tagname)

Получает элементы с указанным именем tagnameсреди всех потомков данного элемента.

getAttribute(attname)

Получить значение атрибута с именем attname.

getAttributeNode(attrname)

Возвращает атрибут с именем attrnameв виде объекта–узла.

removeAttribute(attname)

Удалить атрибут с именем attname.

removeAttributeNode(oldAttr)

Удалить атрибут oldAttr(задан в виде объекта–узла).

setAttribute(attname, value)

Устанавливает значение атрибута attnameравным строке value.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Роман Сузи читать все книги автора по порядку

Роман Сузи - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования Python отзывы


Отзывы читателей о книге Язык программирования Python, автор: Роман Сузи. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x