Учебники

Python Краткое руководство

Обзор Python

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

  • Python интерпретируется — Python обрабатывается интерпретатором во время выполнения. Вам не нужно компилировать вашу программу перед ее выполнением. Это похоже на PERL и PHP.

  • Python является интерактивным — вы можете сидеть в приглашении Python и напрямую взаимодействовать с интерпретатором для написания своих программ.

  • Python является объектно-ориентированным — Python поддерживает объектно-ориентированный стиль или технику программирования, которая инкапсулирует код в объектах.

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

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

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

Python является объектно-ориентированным — Python поддерживает объектно-ориентированный стиль или технику программирования, которая инкапсулирует код в объектах.

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

История Питона

Python был разработан Гвидо ван Россумом в конце 80-х и начале 90-х годов в Национальном исследовательском институте математики и компьютерных наук в Нидерландах.

Python является производным от многих других языков, включая ABC, Modula-3, C, C ++, Algol-68, SmallTalk, Unix и другие языки сценариев.

Python защищен авторским правом. Как и Perl, исходный код Python теперь доступен под лицензией GNU General Public License (GPL).

В настоящее время Python поддерживается основной группой разработчиков в институте, хотя Гвидо ван Россум все еще играет жизненно важную роль в управлении его прогрессом.

Особенности Python

Особенности Python включают в себя —

  • Легко учиться — в Python мало ключевых слов, простая структура и четко определенный синтаксис. Это позволяет студенту быстро освоить язык.

  • Легко читаемый — код Python более четко определен и видим для глаз.

  • Простота в обслуживании — исходный код Python довольно прост в обслуживании.

  • Широкая стандартная библиотека — основная часть библиотеки Python очень портативна и кроссплатформенна, совместима с UNIX, Windows и Macintosh.

  • Интерактивный режим — Python поддерживает интерактивный режим, который позволяет проводить интерактивное тестирование и отладку фрагментов кода.

  • Portable — Python может работать на самых разных аппаратных платформах и имеет одинаковый интерфейс на всех платформах.

  • Расширяемый — Вы можете добавить низкоуровневые модули в интерпретатор Python. Эти модули позволяют программистам добавлять или настраивать свои инструменты для большей эффективности.

  • Базы данных — Python предоставляет интерфейсы для всех основных коммерческих баз данных.

  • Программирование GUI — Python поддерживает приложения GUI, которые можно создавать и переносить на многие системные вызовы, библиотеки и системы Windows, такие как Windows MFC, Macintosh и система X Window Unix.

  • Масштабируемость — Python обеспечивает лучшую структуру и поддержку больших программ, чем сценарии оболочки.

Легко учиться — в Python мало ключевых слов, простая структура и четко определенный синтаксис. Это позволяет студенту быстро освоить язык.

Легко читаемый — код Python более четко определен и видим для глаз.

Простота в обслуживании — исходный код Python довольно прост в обслуживании.

Широкая стандартная библиотека — основная часть библиотеки Python очень портативна и кроссплатформенна, совместима с UNIX, Windows и Macintosh.

Интерактивный режим — Python поддерживает интерактивный режим, который позволяет проводить интерактивное тестирование и отладку фрагментов кода.

Portable — Python может работать на самых разных аппаратных платформах и имеет одинаковый интерфейс на всех платформах.

Расширяемый — Вы можете добавить низкоуровневые модули в интерпретатор Python. Эти модули позволяют программистам добавлять или настраивать свои инструменты для большей эффективности.

Базы данных — Python предоставляет интерфейсы для всех основных коммерческих баз данных.

Программирование GUI — Python поддерживает приложения GUI, которые можно создавать и переносить на многие системные вызовы, библиотеки и системы Windows, такие как Windows MFC, Macintosh и система X Window Unix.

Масштабируемость — Python обеспечивает лучшую структуру и поддержку больших программ, чем сценарии оболочки.

Помимо вышеупомянутых функций, Python имеет большой список хороших функций, некоторые из них перечислены ниже —

  • Он поддерживает функциональные и структурированные методы программирования, а также ООП.

  • Он может использоваться в качестве языка сценариев или может быть скомпилирован в байт-код для создания больших приложений.

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

  • Поддерживает автоматическую сборку мусора.

  • Он может быть легко интегрирован с C, C ++, COM, ActiveX, CORBA и Java.

Он поддерживает функциональные и структурированные методы программирования, а также ООП.

Он может использоваться в качестве языка сценариев или может быть скомпилирован в байт-код для создания больших приложений.

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

Поддерживает автоматическую сборку мусора.

Он может быть легко интегрирован с C, C ++, COM, ActiveX, CORBA и Java.

Python — Настройка среды

Python доступен на самых разных платформах, включая Linux и Mac OS X. Давайте разберемся, как настроить нашу среду Python.

Настройка локальной среды

Откройте окно терминала и введите «python», чтобы узнать, установлен ли он и какая версия установлена.

  • Unix (Solaris, Linux, FreeBSD, AIX, HP / UX, SunOS, IRIX и т. Д.)
  • Win 9x / NT / 2000
  • Macintosh (Intel, PPC, 68K)
  • OS / 2
  • DOS (несколько версий)
  • PalmOS
  • Мобильные телефоны Nokia
  • Windows CE
  • Acorn / RISC OS
  • BeOS
  • Amiga
  • VMS / OpenVMS
  • QNX
  • VxWorks
  • Psion
  • Python также был портирован на виртуальные машины Java и .NET

Получение Python

Самый актуальный и актуальный исходный код, двоичные файлы, документация, новости и т. Д. Доступны на официальном сайте Python https://www.python.org/

Вы можете скачать документацию по Python с https://www.python.org/doc/ . Документация доступна в форматах HTML, PDF и PostScript.

Установка Python

Дистрибутив Python доступен для самых разных платформ. Вам нужно скачать только двоичный код, подходящий для вашей платформы, и установить Python.

Если двоичный код для вашей платформы недоступен, вам нужен компилятор C, чтобы скомпилировать исходный код вручную. Компиляция исходного кода обеспечивает большую гибкость с точки зрения выбора функций, которые требуются при установке.

Вот краткий обзор установки Python на различных платформах —

Установка Unix и Linux

Вот простые шаги для установки Python на компьютере с Unix / Linux.

  • Откройте веб-браузер и перейдите по адресу https://www.python.org/downloads/ .

  • Перейдите по ссылке, чтобы скачать сжатый исходный код, доступный для Unix / Linux.

  • Скачивайте и извлекайте файлы.

  • Редактирование модуля / файла настройки, если вы хотите настроить некоторые параметры.

  • запустить ./configure скрипт

  • делать

  • сделать установку

Откройте веб-браузер и перейдите по адресу https://www.python.org/downloads/ .

Перейдите по ссылке, чтобы скачать сжатый исходный код, доступный для Unix / Linux.

Скачивайте и извлекайте файлы.

Редактирование модуля / файла настройки, если вы хотите настроить некоторые параметры.

запустить ./configure скрипт

делать

сделать установку

Это устанавливает Python в стандартном месте / usr / local / bin и его библиотеках в / usr / local / lib / pythonXX, где XX — версия Python.

Установка Windows

Вот шаги для установки Python на компьютере с Windows.

  • Откройте веб-браузер и перейдите по адресу https://www.python.org/downloads/ .

  • Перейдите по ссылке для файла установщика Windows python-XYZ.msi, где XYZ — версия, которую вам нужно установить.

  • Чтобы использовать этот установщик python-XYZ.msi , система Windows должна поддерживать Microsoft Installer 2.0. Сохраните файл установщика на локальном компьютере, а затем запустите его, чтобы выяснить, поддерживает ли ваш компьютер MSI.

  • Запустите загруженный файл. Это вызывает мастера установки Python, который действительно прост в использовании. Просто примите настройки по умолчанию, дождитесь окончания установки, и все готово.

Откройте веб-браузер и перейдите по адресу https://www.python.org/downloads/ .

Перейдите по ссылке для файла установщика Windows python-XYZ.msi, где XYZ — версия, которую вам нужно установить.

Чтобы использовать этот установщик python-XYZ.msi , система Windows должна поддерживать Microsoft Installer 2.0. Сохраните файл установщика на локальном компьютере, а затем запустите его, чтобы выяснить, поддерживает ли ваш компьютер MSI.

Запустите загруженный файл. Это вызывает мастера установки Python, который действительно прост в использовании. Просто примите настройки по умолчанию, дождитесь окончания установки, и все готово.

Установка Macintosh

Последние Mac поставляются с установленным Python, но он может устареть на несколько лет. См. Http://www.python.org/download/mac/ для получения инструкций по получению текущей версии вместе с дополнительными инструментами для поддержки разработки на Mac. Для более старых Mac OS до Mac OS X 10.3 (выпущена в 2003 году) доступен MacPython.

Джек Янсен поддерживает его, и вы можете иметь полный доступ ко всей документации на его веб-сайте — http://www.cwi.nl/~jack/macpython.html . Вы можете найти полную информацию об установке Mac OS.

Настройка PATH

Программы и другие исполняемые файлы могут находиться во многих каталогах, поэтому операционные системы предоставляют путь поиска, в котором перечислены каталоги, в которых ОС ищет исполняемые файлы.

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

Переменная пути называется PATH в Unix или Path в Windows (Unix чувствительна к регистру; Windows — нет).

В Mac OS программа установки обрабатывает детали пути. Чтобы вызвать интерпретатор Python из любого конкретного каталога, вы должны добавить каталог Python в свой путь.

Настройка пути в Unix / Linux

Чтобы добавить каталог Python к пути для конкретной сессии в Unix —

  • В командной оболочке csh введите setenv PATH «$ PATH: / usr / local / bin / python» и нажмите Enter.

  • В оболочке bash (Linux) — введите export PATH = «$ PATH: / usr / local / bin / python» и нажмите Enter.

  • В оболочке sh или ksh введите PATH = «$ PATH: / usr / local / bin / python» и нажмите Enter.

  • Примечание — / usr / local / bin / python — это путь к каталогу Python

В командной оболочке csh введите setenv PATH «$ PATH: / usr / local / bin / python» и нажмите Enter.

В оболочке bash (Linux) — введите export PATH = «$ PATH: / usr / local / bin / python» и нажмите Enter.

В оболочке sh или ksh введите PATH = «$ PATH: / usr / local / bin / python» и нажмите Enter.

Примечание — / usr / local / bin / python — это путь к каталогу Python

Настройка пути в Windows

Чтобы добавить каталог Python к пути для конкретного сеанса в Windows —

В командной строке введите путь% path%; C: \ Python и нажмите Enter.

Примечание. C: \ Python — это путь к каталогу Python.

Переменные среды Python

Вот важные переменные среды, которые могут быть распознаны Python —

Sr.No. Переменная и описание
1

PYTHONPATH

Он играет роль, похожую на PATH. Эта переменная сообщает интерпретатору Python, где искать файлы модуля, импортированные в программу. Он должен включать каталог исходной библиотеки Python и каталоги, содержащие исходный код Python. PYTHONPATH иногда задается установщиком Python.

2

PYTHONSTARTUP

Он содержит путь к файлу инициализации, содержащему исходный код Python. Это выполняется каждый раз, когда вы запускаете переводчик. В Unix он называется .pythonrc.py и содержит команды, которые загружают утилиты или модифицируют PYTHONPATH.

3

PYTHONCASEOK

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

4

PYTHONHOME

Это альтернативный путь поиска модуля. Обычно он встроен в каталоги PYTHONSTARTUP или PYTHONPATH, чтобы упростить переключение библиотек модулей.

PYTHONPATH

Он играет роль, похожую на PATH. Эта переменная сообщает интерпретатору Python, где искать файлы модуля, импортированные в программу. Он должен включать каталог исходной библиотеки Python и каталоги, содержащие исходный код Python. PYTHONPATH иногда задается установщиком Python.

PYTHONSTARTUP

Он содержит путь к файлу инициализации, содержащему исходный код Python. Это выполняется каждый раз, когда вы запускаете переводчик. В Unix он называется .pythonrc.py и содержит команды, которые загружают утилиты или модифицируют PYTHONPATH.

PYTHONCASEOK

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

PYTHONHOME

Это альтернативный путь поиска модуля. Обычно он встроен в каталоги PYTHONSTARTUP или PYTHONPATH, чтобы упростить переключение библиотек модулей.

Запуск Python

Есть три разных способа запуска Python —

Интерактивный переводчик

Вы можете запустить Python из Unix, DOS или любой другой системы, которая предоставляет вам интерпретатор командной строки или окно оболочки.

Введите python в командной строке.

Начните кодировать прямо в интерактивном переводчике.

$python # Unix/Linux
or
python% # Unix/Linux
or
C:> python # Windows/DOS

Вот список всех доступных параметров командной строки —

Sr.No. Вариант и описание
1

-d

Это обеспечивает отладочный вывод.

2

Он генерирует оптимизированный байт-код (в результате чего .pyo файлы).

3

-S

Не запускайте сайт импорта для поиска путей Python при запуске.

4

-v

подробный вывод (подробный след по операторам импорта).

5

-ИКС

отключите встроенные исключения на основе классов (просто используйте строки); устарел начиная с версии 1.6.

6

-c cmd

запустить скрипт Python, отправленный в виде строки cmd

7

файл

запустить скрипт Python из указанного файла

-d

Это обеспечивает отладочный вывод.

Он генерирует оптимизированный байт-код (в результате чего .pyo файлы).

-S

Не запускайте сайт импорта для поиска путей Python при запуске.

-v

подробный вывод (подробный след по операторам импорта).

-ИКС

отключите встроенные исключения на основе классов (просто используйте строки); устарел начиная с версии 1.6.

-c cmd

запустить скрипт Python, отправленный в виде строки cmd

файл

запустить скрипт Python из указанного файла

Скрипт из командной строки

Сценарий Python может быть выполнен из командной строки, вызвав интерпретатор в вашем приложении, как показано ниже:

$python script.py # Unix/Linux

or

python% script.py # Unix/Linux

or 

C: >python script.py # Windows/DOS

Примечание. Убедитесь, что режим доступа к файлам разрешает выполнение.

Интегрированная среда развития

Вы также можете запускать Python из среды графического интерфейса пользователя (GUI), если в вашей системе есть приложение с графическим интерфейсом, которое поддерживает Python.

  • Unix — IDLE — самая первая Unix IDE для Python.

  • Windows — PythonWin — это первый интерфейс Windows для Python, представляющий собой среду разработки с графическим интерфейсом.

  • Macintosh — версия Python для Macintosh вместе с IDLE IDE доступна на основном веб-сайте, которую можно загрузить в виде файлов MacBinary или BinHex’d.

Unix — IDLE — самая первая Unix IDE для Python.

Windows — PythonWin — это первый интерфейс Windows для Python, представляющий собой среду разработки с графическим интерфейсом.

Macintosh — версия Python для Macintosh вместе с IDLE IDE доступна на основном веб-сайте, которую можно загрузить в виде файлов MacBinary или BinHex’d.

Если вы не можете правильно настроить среду, вы можете обратиться за помощью к системному администратору. Убедитесь, что среда Python правильно настроена и работает отлично.

Примечание. Все примеры, приведенные в последующих главах, выполняются с версией Python 2.4.3, доступной для разновидности CentOS в Linux.

Мы уже настроили среду программирования Python в Интернете, чтобы вы могли выполнять все доступные примеры в Интернете одновременно с изучением теории. Не стесняйтесь изменять любой пример и выполнять его онлайн.

Python — основной синтаксис

Язык Python имеет много общего с Perl, C и Java. Однако между языками есть определенные различия.

Первая программа на Python

Выполним программы в разных режимах программирования.

Программирование в интерактивном режиме

Вызов интерпретатора без передачи файла сценария в качестве параметра вызывает следующее приглашение:

$ python
Python 2.4.3 (#1, Nov 11 2010, 13:34:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Введите следующий текст в приглашении Python и нажмите Enter —

>>> print "Hello, Python!"

Если вы работаете с новой версией Python, вам нужно будет использовать оператор print с круглыми скобками, как в print («Hello, Python!»); , Однако в Python версии 2.4.3 это дает следующий результат —

Hello, Python!

Script Mode Программирование

Вызов интерпретатора с параметром сценария начинает выполнение сценария и продолжается до завершения сценария. Когда сценарий завершен, интерпретатор больше не активен.

Давайте напишем простую программу на Python в сценарии. Файлы Python имеют расширение .py . Введите следующий исходный код в файл test.py —

Live Demo

print "Hello, Python!"

Мы предполагаем, что у вас установлен интерпретатор Python в переменной PATH. Теперь попробуйте запустить эту программу следующим образом:

$ python test.py

Это дает следующий результат —

Hello, Python!

Давайте попробуем другой способ выполнить скрипт Python. Вот модифицированный файл test.py —

Live Demo

#!/usr/bin/python

print "Hello, Python!"

Мы предполагаем, что у вас есть интерпретатор Python, доступный в каталоге / usr / bin. Теперь попробуйте запустить эту программу следующим образом:

$ chmod +x test.py     # This is to make file executable
$./test.py

Это дает следующий результат —

Hello, Python!

Идентификаторы Python

Идентификатор Python — это имя, используемое для идентификации переменной, функции, класса, модуля или другого объекта. Идентификатор начинается с буквы от A до Z или от a до z или символа подчеркивания (_), за которым следуют ноль или более букв, символов подчеркивания и цифр (от 0 до 9).

Python не допускает использование знаков препинания, таких как @, $ и% в идентификаторах. Python является регистрозависимым языком программирования. Таким образом, рабочая сила и рабочая сила — это два разных идентификатора в Python.

Вот соглашения об именах для идентификаторов Python —

  • Имена классов начинаются с заглавной буквы. Все остальные идентификаторы начинаются со строчной буквы.

  • Начало идентификатора с единственным начальным подчеркиванием означает, что идентификатор является частным.

  • Начало идентификатора с двумя ведущими подчеркиваниями указывает на строго частный идентификатор.

  • Если идентификатор также заканчивается двумя завершающими подчеркиваниями, этот идентификатор является специальным именем, определяемым языком.

Имена классов начинаются с заглавной буквы. Все остальные идентификаторы начинаются со строчной буквы.

Начало идентификатора с единственным начальным подчеркиванием означает, что идентификатор является частным.

Начало идентификатора с двумя ведущими подчеркиваниями указывает на строго частный идентификатор.

Если идентификатор также заканчивается двумя завершающими подчеркиваниями, этот идентификатор является специальным именем, определяемым языком.

Зарезервированные слова

В следующем списке показаны ключевые слова Python. Это зарезервированные слова, и вы не можете использовать их как имена констант, переменных или любых других идентификаторов. Все ключевые слова Python содержат только строчные буквы.

а также Exec не
утверждать в конце концов или же
перерыв за проходить
учебный класс от Распечатать
Продолжить Глобальный повышение
Защита если вернуть
дель Импортировать пытаться
Элиф в в то время как
еще является с
Кроме лямбда Уступать

Линии и отступы

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

Число пробелов в отступе является переменным, но все операторы в блоке должны иметь одинаковый отступ. Например —

if True:
   print "True"
else:
   print "False"

Однако следующий блок генерирует ошибку —

if True:
print "Answer"
print "True"
else:
print "Answer"
print "False"

Таким образом, в Python все непрерывные линии с одинаковым количеством пробелов образуют блок. В следующем примере есть различные блоки операторов:

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

#!/usr/bin/python

import sys

try:
   # open file stream
   file = open(file_name, "w")
except IOError:
   print "There was an error writing to", file_name
   sys.exit()
print "Enter '", file_finish,
print "' When finished"
while file_text != file_finish:
   file_text = raw_input("Enter text: ")
   if file_text == file_finish:
      # close the file
      file.close
      break
   file.write(file_text)
   file.write("\n")
file.close()
file_name = raw_input("Enter filename: ")
if len(file_name) == 0:
   print "Next time please enter something"
   sys.exit()
try:
   file = open(file_name, "r")
except IOError:
   print "There was an error reading file"
   sys.exit()
file_text = file.read()
file.close()
print file_text

Многострочные операторы

Утверждения в Python обычно заканчиваются новой строкой. Однако Python разрешает использовать символ продолжения строки (\) для обозначения продолжения строки. Например —

total = item_one + \
        item_two + \
        item_three

Операторы, содержащиеся в скобках [], {} или (), не должны использовать символ продолжения строки. Например —

days = ['Monday', 'Tuesday', 'Wednesday',
        'Thursday', 'Friday']

Цитата в Python

Python принимает одинарные (‘), двойные («) и тройные (‘ » или» «») кавычки для обозначения строковых литералов при условии, что одинаковый тип кавычек начинается и заканчивается строкой.

Тройные кавычки используются для разделения строки на несколько строк. Например, все следующие являются законными —

word = 'word'
sentence = "This is a sentence."
paragraph = """This is a paragraph. It is
made up of multiple lines and sentences."""

Комментарии в Python

Знак хеша (#), который не находится внутри строкового литерала, начинает комментарий. Все символы после # и до конца физической строки являются частью комментария, и интерпретатор Python их игнорирует.

Live Demo

#!/usr/bin/python

# First comment
print "Hello, Python!" # second comment

Это дает следующий результат —

Hello, Python!

Вы можете ввести комментарий в той же строке после выражения или выражения —

name = "Madisetti" # This is again comment

Вы можете прокомментировать несколько строк следующим образом —

# This is a comment.
# This is a comment, too.
# This is a comment, too.
# I said that already.

Использование пустых строк

Строка, содержащая только пробел, возможно с комментарием, называется пустой строкой, и Python полностью игнорирует ее.

В сеансе интерактивного интерпретатора необходимо ввести пустую физическую строку для завершения многострочного оператора.

В ожидании пользователя

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

#!/usr/bin/python

raw_input("\n\nPress the enter key to exit.")

Здесь «\ n \ n» используется для создания двух новых строк перед отображением фактической строки. Как только пользователь нажимает клавишу, программа завершается. Это хороший прием, чтобы держать окно консоли открытым, пока пользователь не закончит работу с приложением.

Несколько операторов на одной строке

Точка с запятой (;) допускает несколько операторов в одной строке, если ни один из операторов не начинает новый блок кода. Вот пример фрагмента с использованием точки с запятой:

import sys; x = 'foo'; sys.stdout.write(x + '\n')

Несколько групп утверждений как наборы

Группа отдельных операторов, которые составляют один блок кода, называются наборами в Python. Составные или сложные операторы, такие как if, while, def и class, требуют строки заголовка и набора.

Строки заголовка начинают оператор (с ключевого слова) и заканчиваются двоеточием (:) и сопровождаются одной или несколькими строками, составляющими набор. Например —

if expression : 
   suite
elif expression : 
   suite 
else : 
   suite

Аргументы командной строки

Многие программы могут быть запущены, чтобы предоставить вам некоторую основную информацию о том, как их следует запускать. Python позволяет вам сделать это с -h —

$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d     : debug output from parser (also PYTHONDEBUG=x)
-E     : ignore environment variables (such as PYTHONPATH)
-h     : print this help message and exit

[ etc. ]

Вы также можете запрограммировать свой скрипт таким образом, чтобы он принимал различные параметры. Аргументы командной строки — это сложная тема, которую следует изучить чуть позже, как только вы ознакомитесь с остальными понятиями Python.

Python — Типы переменных

Переменные — это не что иное, как зарезервированные области памяти для хранения значений. Это означает, что когда вы создаете переменную, вы резервируете некоторое пространство в памяти.

На основе типа данных переменной интерпретатор выделяет память и решает, что можно сохранить в зарезервированной памяти. Поэтому, назначая переменным разные типы данных, вы можете хранить целые числа, десятичные числа или символы в этих переменных.

Присвоение значений переменным

Переменные Python не требуют явного объявления для резервирования места в памяти. Объявление происходит автоматически, когда вы присваиваете значение переменной. Знак равенства (=) используется для присвоения значений переменным.

Операнд слева от оператора = — это имя переменной, а операнд справа от оператора = — это значение, хранящееся в переменной. Например —

Live Demo

#!/usr/bin/python

counter = 100          # An integer assignment
miles   = 1000.0       # A floating point
name    = "John"       # A string

print counter
print miles
print name

Здесь 100, 1000.0 и «Джон» — это значения, присвоенные переменным счетчика , миль и имени соответственно. Это дает следующий результат —

100
1000.0
John

Множественное назначение

Python позволяет назначать одно значение нескольким переменным одновременно. Например —

a = b = c = 1

Здесь создается целочисленный объект со значением 1, и все три переменные назначаются одной и той же ячейке памяти. Вы также можете назначить несколько объектов для нескольких переменных. Например —

a,b,c = 1,2,"john"

Здесь два целочисленных объекта со значениями 1 и 2 назначены переменным a и b соответственно, а один строковый объект со значением «john» назначен переменной c.

Стандартные типы данных

Данные, хранящиеся в памяти, могут быть разных типов. Например, возраст человека сохраняется в виде числового значения, а его или ее адрес — в виде буквенно-цифровых символов. Python имеет различные стандартные типы данных, которые используются для определения возможных операций над ними и метода хранения для каждого из них.

Python имеет пять стандартных типов данных —

  • чисел
  • строка
  • Список
  • Кортеж
  • толковый словарь

Номера Python

Числовые типы данных хранят числовые значения. Числовые объекты создаются при назначении им значения. Например —

var1 = 1
var2 = 10

Вы также можете удалить ссылку на числовой объект с помощью оператора del. Синтаксис оператора del —

del var1[,var2[,var3[....,varN]]]]

Вы можете удалить один объект или несколько объектов с помощью оператора del. Например —

del var
del var_a, var_b

Python поддерживает четыре различных числовых типа —

  • int (целые числа со знаком)
  • long (длинные целые числа, они также могут быть представлены в восьмеричном и шестнадцатеричном виде)
  • float (реальные значения с плавающей точкой)
  • комплекс (комплексные числа)

Примеры

Вот несколько примеров чисел —

ИНТ долго поплавок сложный
10 51924361L 0.0 3.14j
100 -0x19323L 15,20 45.j
-786 0122L -21,9 9.322e-36j
080 0xDEFABCECBDAECBFBAEl 32,3 + e18 .876j
-0490 535633629843L -90. -.6545 + 0J
-0x260 -052318172735L -32.54e100 3e + 26J
0x69 -4721885298529L 70,2-E12 4.53e-7j
  • Python позволяет использовать строчные буквы l с длинными, но рекомендуется использовать только заглавные буквы L, чтобы избежать путаницы с числом 1. Python отображает длинные целые числа с заглавными буквами L.

  • Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей точкой, обозначаемых x + yj, где x и y — действительные числа, а j — мнимая единица.

Python позволяет использовать строчные буквы l с длинными, но рекомендуется использовать только заглавные буквы L, чтобы избежать путаницы с числом 1. Python отображает длинные целые числа с заглавными буквами L.

Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей точкой, обозначаемых x + yj, где x и y — действительные числа, а j — мнимая единица.

Python Strings

Строки в Python идентифицируются как непрерывный набор символов, представленных в кавычках. Python допускает использование пар одинарных или двойных кавычек. Подмножества строк могут быть получены с использованием оператора среза ([] и [:]) с индексами, начинающимися с 0 в начале строки и проходящими их от -1 в конце.

Знак плюс (+) — это оператор объединения строк, а звездочка (*) — оператор повторения. Например —

Live Demo

#!/usr/bin/python

str = 'Hello World!'

print str          # Prints complete string
print str[0]       # Prints first character of the string
print str[2:5]     # Prints characters starting from 3rd to 5th
print str[2:]      # Prints string starting from 3rd character
print str * 2      # Prints string two times
print str + "TEST" # Prints concatenated string

Это даст следующий результат —

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

Списки Python

Списки являются наиболее универсальными из составных типов данных Python. Список содержит элементы, разделенные запятыми и заключенные в квадратные скобки ([]). В некоторой степени списки похожи на массивы в C. Одно из различий между ними состоит в том, что все элементы, принадлежащие списку, могут иметь разные типы данных.

Доступ к значениям, хранящимся в списке, можно получить с помощью оператора слайса ([] и [:]), индексы которого начинаются с 0 в начале списка и заканчиваются -1. Знак плюс (+) является оператором объединения списков, а звездочка (*) — оператором повторения. Например —

Live Demo

#!/usr/bin/python

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print list          # Prints complete list
print list[0]       # Prints first element of the list
print list[1:3]     # Prints elements starting from 2nd till 3rd 
print list[2:]      # Prints elements starting from 3rd element
print tinylist * 2  # Prints list two times
print list + tinylist # Prints concatenated lists

Это дает следующий результат —

['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

Python Tuples

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

Основные различия между списками и кортежами: списки заключены в квадратные скобки ([]), их элементы и размер можно изменить, а кортежи заключить в скобки (()) и не могут быть обновлены. Кортежи можно рассматривать как списки только для чтения . Например —

Live Demo

#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print tuple           # Prints complete list
print tuple[0]        # Prints first element of the list
print tuple[1:3]      # Prints elements starting from 2nd till 3rd 
print tuple[2:]       # Prints elements starting from 3rd element
print tinytuple * 2   # Prints list two times
print tuple + tinytuple # Prints concatenated lists

Это дает следующий результат —

('abcd', 786, 2.23, 'john', 70.2)
abcd
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

Следующий код недопустим с кортежем, потому что мы попытались обновить кортеж, что недопустимо. Подобный случай возможен со списками —

#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
tuple[2] = 1000    # Invalid syntax with tuple
list[2] = 1000     # Valid syntax with list

Словарь Python

Словари Python являются разновидностью хеш-таблиц. Они работают как ассоциативные массивы или хэши, найденные в Perl, и состоят из пар ключ-значение. Ключ словаря может быть практически любого типа Python, но обычно это числа или строки. Значения, с другой стороны, могут быть любым произвольным объектом Python.

Словари заключены в фигурные скобки ({}), а значения могут быть назначены и доступны с помощью квадратных скобок ([]). Например —

Live Demo

#!/usr/bin/python

dict = {}
dict['one'] = "This is one"
dict[2]     = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print dict['one']       # Prints value for 'one' key
print dict[2]           # Prints value for 2 key
print tinydict          # Prints complete dictionary
print tinydict.keys()   # Prints all the keys
print tinydict.values() # Prints all the values

Это дает следующий результат —

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']

Словари не имеют понятия порядка среди элементов. Неверно говорить, что элементы «вышли из строя»; они просто неупорядочены.

Преобразование типов данных

Иногда вам может потребоваться выполнить преобразования между встроенными типами. Для преобразования между типами вы просто используете имя типа в качестве функции.

Есть несколько встроенных функций для выполнения преобразования из одного типа данных в другой. Эти функции возвращают новый объект, представляющий преобразованное значение.

Sr.No. Описание функции
1

int (x [, base])

Преобразует х в целое число. base указывает базу, если x является строкой.

2

длинный (x [, base])

Преобразует x в длинное целое. base указывает базу, если x является строкой.

3

Поплавок (х)

Преобразует x в число с плавающей точкой.

4

сложный (настоящий [, imag])

Создает комплексное число.

5

ул (х)

Преобразует объект x в строковое представление.

6

магнезии (х)

Преобразует объект x в строку выражения.

7

Eval (ул)

Оценивает строку и возвращает объект.

8

набор (ы)

Преобразует s в кортеж.

9

(ена)

Преобразует s в список.

10

набор (ы)

Преобразует s в набор.

11

ДИКТ (д)

Создает словарь. d должен быть последовательностью (ключ, значение) кортежей.

12

frozenset (ы)

Преобразует s в замороженный набор.

13

CHR (х)

Преобразует целое число в символ.

14

unichr (х)

Преобразует целое число в символ Unicode.

15

Ord (х)

Преобразует один символ в его целочисленное значение.

16

гекс (х)

Преобразует целое число в шестнадцатеричную строку.

17

Октябрь (х)

Преобразует целое число в восьмеричную строку.

int (x [, base])

Преобразует х в целое число. base указывает базу, если x является строкой.

длинный (x [, base])

Преобразует x в длинное целое. base указывает базу, если x является строкой.

Поплавок (х)

Преобразует x в число с плавающей точкой.

сложный (настоящий [, imag])

Создает комплексное число.

ул (х)

Преобразует объект x в строковое представление.

магнезии (х)

Преобразует объект x в строку выражения.

Eval (ул)

Оценивает строку и возвращает объект.

набор (ы)

Преобразует s в кортеж.

(ена)

Преобразует s в список.

набор (ы)

Преобразует s в набор.

ДИКТ (д)

Создает словарь. d должен быть последовательностью (ключ, значение) кортежей.

frozenset (ы)

Преобразует s в замороженный набор.

CHR (х)

Преобразует целое число в символ.

unichr (х)

Преобразует целое число в символ Unicode.

Ord (х)

Преобразует один символ в его целочисленное значение.

гекс (х)

Преобразует целое число в шестнадцатеричную строку.

Октябрь (х)

Преобразует целое число в восьмеричную строку.

Python — Основные операторы

Операторы — это конструкции, которые могут манипулировать значением операндов.

Рассмотрим выражение 4 + 5 = 9. Здесь 4 и 5 называются операндами, а + — операторами.

Типы Оператора

Язык Python поддерживает следующие типы операторов.

  • Арифметические Операторы
  • Операторы сравнения (реляционные)
  • Операторы присваивания
  • Логические Операторы
  • Битовые операторы
  • Членство операторов
  • Идентификационные операторы

Давайте посмотрим на всех операторов по одному.

Арифметические операторы Python

Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —

[ Показать пример ]

оператор Описание пример
+ Дополнение Добавляет значения по обе стороны от оператора. а + б = 30
— вычитание Вычитает правый операнд из левого операнда. а — б = -10
* Умножение Умножает значения по обе стороны от оператора а * б = 200
/ Отдел Делит левый операнд на правый операнд б / а = 2
% Модуль Делит левый операнд на правый и возвращает остаток б% а = 0
** Экспонент Выполняет экспоненциальный (силовой) расчет по операторам а ** б = 10 к степени 20
// Полное деление — деление операндов, где результатом является частное, в котором удаляются цифры после десятичной точки. Но если один из операндов отрицателен, результат получается беспорядочным, то есть округляется от нуля (в сторону отрицательной бесконечности) — 9 // 2 = 4 и 9.0 // 2.0 = 4.0, -11 // 3 = -4, -11.0 // 3 = -4.0

Операторы сравнения Python

Эти операторы сравнивают значения по обе стороны от них и определяют соотношение между ними. Их также называют реляционными операторами.

Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —

[ Показать пример ]

оператор Описание пример
== Если значения двух операндов равны, то условие становится истинным. (a == b) не соответствует действительности.
знак равно Если значения двух операндов не равны, то условие становится истинным. (a! = b) верно.
<> Если значения двух операндов не равны, то условие становится истинным. (а <> б) верно. Это похоже на! = Оператор.
> Если значение левого операнда больше, чем значение правого операнда, условие становится истинным. (а> б) не соответствует действительности.
< Если значение левого операнда меньше значения правого операнда, условие становится истинным. (а <б) верно.
> = Если значение левого операнда больше или равно значению правого операнда, условие становится истинным. (a> = b) не соответствует действительности.
<= Если значение левого операнда меньше или равно значению правого операнда, условие становится истинным. (a <= b) верно.

Операторы присваивания Python

Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —

[ Показать пример ]

оператор Описание пример
знак равно Назначает значения от правых операндов к левому операнду c = a + b присваивает значение a + b в c
+ = Добавить И Добавляет правый операнд к левому операнду и присваивает результат левому операнду с + = а эквивалентно с = с + а
— = вычесть И Вычитает правый операнд из левого операнда и присваивает результат левому операнду с — = а эквивалентно с = с — а
* = Умножить И Он умножает правый операнд на левый операнд и присваивает результат левому операнду с * = а эквивалентно с = с * а
/ = Разделить И Он делит левый операнд с правым операндом и присваивает результат левому операнду c / = a эквивалентно c = c / ac / = a эквивалентно c = c / a
% = Модуль И Он принимает модуль с использованием двух операндов и присваивает результат левому операнду с% = а эквивалентно с = с% а
** = экспонента И Выполняет экспоненциальный (силовой) расчет операторов и присваивает значение левому операнду с ** = а эквивалентно с = с ** а
// = этаж Выполняет деление по полу на операторы и присваивает значение левому операнду c // = a эквивалентно c = c // a

Битовые операторы Python

Побитовый оператор работает с битами и выполняет побитовую операцию. Предположим, если а = 60; и б = 13; Теперь в двоичном формате они будут выглядеть следующим образом —

а = 0011 1100

b = 0000 1101

——————

A & B = 0000 1100

a | b = 0011 1101

a ^ b = 0011 0001

~ a = 1100 0011

Существуют следующие побитовые операторы, поддерживаемые языком Python

[ Показать пример ]

оператор Описание пример
& Бинарный И Оператор копирует немного в результат, если он существует в обоих операндах (А и В) (означает 0000 1100)
| Бинарный ИЛИ Он копирует немного, если он существует в любом из операндов. (a | b) = 61 (означает 0011 1101)
^ Двоичный XOR Он копирует бит, если он установлен в одном операнде, но не в обоих. (a ^ b) = 49 (означает 0011 0001)
Бинарные дополнения Он одинарный и имеет эффект «переворачивания» битов. (~ a) = -61 (означает 1100 0011 в форме дополнения 2 из-за двоичного числа со знаком).
<< Бинарный сдвиг влево Значение левого операнда перемещается влево на количество битов, указанное правым операндом. << 2 = 240 (означает 1111 0000)
>> Двоичное правое смещение Значение левого операнда перемещается вправо на количество битов, указанное правым операндом. a >> 2 = 15 (означает 0000 1111)

Python логические операторы

В языке Python поддерживаются следующие логические операторы. Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда

[ Показать пример ]

оператор Описание пример
и логическое И Если оба операнда имеют значение true, условие становится истинным. (а и б) верно.
или логическое ИЛИ Если любой из двух операндов отличен от нуля, условие становится истинным. (а или б) верно.
не логично НЕ Используется для изменения логического состояния своего операнда. Не (а и б) является ложным.

Используется для изменения логического состояния своего операнда.

Операторы членства в Python

Операторы членства в Python проверяют членство в последовательности, такой как строки, списки или кортежи. Есть два оператора членства, как объяснено ниже —

[ Показать пример ]

оператор Описание пример
в Значение true, если он находит переменную в указанной последовательности, и false в противном случае. x в y, здесь приводит к 1, если x является членом последовательности y.
не в Возвращает значение true, если не находит переменную в указанной последовательности, и false в противном случае. x не в y, здесь не в результате в 1, если x не является членом последовательности y.

Python Identity Operators

Операторы идентификации сравнивают места в памяти двух объектов. Ниже описаны два оператора идентификации.

[ Показать пример ]

оператор Описание пример
является Значение true, если переменные по обе стороны от оператора указывают на один и тот же объект, и false в противном случае. x — это y, здесь результат равен 1, если id (x) равен id (y).
не является Оценивается как ложное, если переменные по обе стороны от оператора указывают на один и тот же объект и истинное в противном случае. x — это не y, здесь это не приводит к 1, если id (x) не равен id (y).

Приоритет операторов Python

В следующей таблице перечислены все операторы от наивысшего приоритета к низшему.

[ Показать пример ]

Sr.No. Оператор и описание
1

**

Возведение в степень (возведение к власти)

2

~ + —

Дополнение, унарный плюс и минус (имена методов для двух последних: + @ и — @)

3

* /% //

Умножение, деление, деление по модулю и полу

4

+ —

Сложение и вычитание

5

>> <<

Сдвиг вправо и влево

6

&

Побитовое И

7

^ |

Побитовое исключающее `ИЛИ ‘и регулярное` ИЛИ’

8

<= <>> =

Операторы сравнения

9

<> ==! =

Операторы равенства

10

=% = / = // = — = + = * = ** =

Операторы присваивания

11

это не

Идентификационные операторы

12

в не в

Членство операторов

13

нет или и

Логические операторы

**

Возведение в степень (возведение к власти)

~ + —

Дополнение, унарный плюс и минус (имена методов для двух последних: + @ и — @)

* /% //

Умножение, деление, деление по модулю и полу

+ —

Сложение и вычитание

>> <<

Сдвиг вправо и влево

&

Побитовое И

^ |

Побитовое исключающее `ИЛИ ‘и регулярное` ИЛИ’

<= <>> =

Операторы сравнения

<> ==! =

Операторы равенства

=% = / = // = — = + = * = ** =

Операторы присваивания

это не

Идентификационные операторы

в не в

Членство операторов

нет или и

Логические операторы

Python — принятие решений

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

Структуры принятия решений оценивают множественные выражения, которые дают ИСТИНА или ЛОЖЬ в качестве результата. Вам необходимо определить, какое действие предпринять и какие операторы выполнить, если результат равен ИСТИНА или ЛОЖЬ в противном случае.

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

Принятие решений в Python

Язык программирования Python принимает любые ненулевые и ненулевые значения в качестве ИСТИНЫ, а если он равен нулю или нулю , то он принимается как ЛОЖНОЕ значение.

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

Sr.No. Заявление и описание
1 если заявления

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

2 если … еще заявления

За оператором if может следовать необязательный оператор else , который выполняется, когда логическое выражение имеет значение FALSE.

3 вложенные операторы if

Вы можете использовать один оператор if или else if внутри другого оператора if или else if .

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

За оператором if может следовать необязательный оператор else , который выполняется, когда логическое выражение имеет значение FALSE.

Вы можете использовать один оператор if или else if внутри другого оператора if или else if .

Давайте кратко рассмотрим каждое решение —

Одноместные номера

Если набор предложения if состоит только из одной строки, он может идти в той же строке, что и оператор заголовка.

Вот пример однострочного предложения if

Live Demo

#!/usr/bin/python

var = 100
if ( var == 100 ) : print "Value of expression is 100"
print "Good bye!"

Когда приведенный выше код выполняется, он дает следующий результат —

Value of expression is 100
Good bye!

Python — Петли

В общем случае операторы выполняются последовательно: первый оператор в функции выполняется первым, затем второй и так далее. Может возникнуть ситуация, когда вам нужно выполнить блок кода несколько раз.

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

Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз. Следующая диаграмма иллюстрирует оператор цикла —

Петлевая архитектура

Язык программирования Python предоставляет следующие типы циклов для обработки требований циклов.

Sr.No. Тип и описание петли
1 в то время как цикл

Повторяет оператор или группу операторов, пока данное условие ИСТИНА. Он проверяет условие перед выполнением тела цикла.

2 для цикла

Выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной цикла.

3 вложенные циклы

Вы можете использовать один или несколько циклов внутри любого другого цикла while, for или do.. while.

Повторяет оператор или группу операторов, пока данное условие ИСТИНА. Он проверяет условие перед выполнением тела цикла.

Выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной цикла.

Вы можете использовать один или несколько циклов внутри любого другого цикла while, for или do.. while.

Заявления о контроле цикла

Операторы управления циклом изменяют выполнение от его нормальной последовательности. Когда выполнение покидает область действия, все автоматические объекты, созданные в этой области, уничтожаются.

Python поддерживает следующие операторы управления. Нажмите на следующие ссылки, чтобы проверить их детали.

Давайте кратко рассмотрим операторы управления циклом

Sr.No. Контрольное заявление и описание
1 заявление о нарушении

Завершает оператор цикла и передает выполнение в оператор, следующий сразу за циклом.

2 продолжить заявление

Заставляет петлю пропускать оставшуюся часть своего тела и немедленно проверять свое состояние перед повторением.

3 пройти заявление

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

Завершает оператор цикла и передает выполнение в оператор, следующий сразу за циклом.

Заставляет петлю пропускать оставшуюся часть своего тела и немедленно проверять свое состояние перед повторением.

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

Python — Числа

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

Числовые объекты создаются при назначении им значения. Например —

var1 = 1
var2 = 10

Вы также можете удалить ссылку на числовой объект с помощью оператора del . Синтаксис оператора del —

del var1[,var2[,var3[....,varN]]]]

Вы можете удалить один объект или несколько объектов с помощью оператора del . Например —

del var
del var_a, var_b

Python поддерживает четыре различных числовых типа —

  • int (целые числа со знаком ) — их часто называют просто целыми числами или целыми числами, это положительные или отрицательные целые числа без десятичной точки.

  • long (длинные целые числа) — также называемые long, они представляют собой целые числа неограниченного размера, написанные как целые числа и сопровождаемые прописными или строчными буквами L.

  • float (действительные значения с плавающей точкой) — также называемые числами с плавающей точкой , они представляют собой действительные числа и записываются с десятичной точкой, разделяющей целые и дробные части. Поплавки также могут быть в научной записи, где E или e обозначают степень 10 (2,5e2 = 2,5 x 10 2 = 250).

  • complex (комплексные числа) — имеют форму a + bJ, где a и b являются числами с плавающей точкой, а J (или j) представляет квадратный корень из -1 (который является мнимым числом). Действительная часть числа a, а мнимая часть b. Комплексные числа мало используются в программировании на Python.

int (целые числа со знаком ) — их часто называют просто целыми числами или целыми числами, это положительные или отрицательные целые числа без десятичной точки.

long (длинные целые числа) — также называемые long, они представляют собой целые числа неограниченного размера, написанные как целые числа и сопровождаемые прописными или строчными буквами L.

float (действительные значения с плавающей точкой) — также называемые числами с плавающей точкой , они представляют собой действительные числа и записываются с десятичной точкой, разделяющей целые и дробные части. Поплавки также могут быть в научной записи, где E или e обозначают степень 10 (2,5e2 = 2,5 x 10 2 = 250).

complex (комплексные числа) — имеют форму a + bJ, где a и b являются числами с плавающей точкой, а J (или j) представляет квадратный корень из -1 (который является мнимым числом). Действительная часть числа a, а мнимая часть b. Комплексные числа мало используются в программировании на Python.

Примеры

Вот несколько примеров чисел

ИНТ долго поплавок сложный
10 51924361L 0.0 3.14j
100 -0x19323L 15,20 45.j
-786 0122L -21,9 9.322e-36j
080 0xDEFABCECBDAECBFBAEL 32,3 + e18 .876j
-0490 535633629843L -90. -.6545 + 0J
-0x260 -052318172735L -32.54e100 3e + 26J
0x69 -4721885298529L 70,2-E12 4.53e-7j
  • Python позволяет использовать строчные буквы L с длинными, но рекомендуется использовать только прописные буквы L, чтобы избежать путаницы с числом 1. Python отображает длинные целые числа с заглавными буквами L.

  • Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей запятой, обозначаемых a + bj, где a — действительная часть, а b — мнимая часть комплексного числа.

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

Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей запятой, обозначаемых a + bj, где a — действительная часть, а b — мнимая часть комплексного числа.

Преобразование чисел

Python конвертирует числа внутри выражения, содержащего смешанные типы, в общий тип для оценки. Но иногда вам нужно явно привести число из одного типа в другой, чтобы удовлетворить требования оператора или параметра функции.

  • Введите int (x), чтобы преобразовать x в простое целое число.

  • Введите long (x), чтобы преобразовать x в длинное целое число.

  • Введите float (x), чтобы преобразовать x в число с плавающей точкой.

  • Введите complex (x), чтобы преобразовать x в комплексное число с вещественной частью x и мнимой частью ноль.

  • Введите complex (x, y), чтобы преобразовать x и y в комплексное число с вещественной частью x и мнимой частью y. х и у числовые выражения

Введите int (x), чтобы преобразовать x в простое целое число.

Введите long (x), чтобы преобразовать x в длинное целое число.

Введите float (x), чтобы преобразовать x в число с плавающей точкой.

Введите complex (x), чтобы преобразовать x в комплексное число с вещественной частью x и мнимой частью ноль.

Введите complex (x, y), чтобы преобразовать x и y в комплексное число с вещественной частью x и мнимой частью y. х и у числовые выражения

Математические функции

Python включает в себя следующие функции, которые выполняют математические вычисления.

Sr.No. Функция и возврат (описание)
1 абс (х)

Абсолютное значение x: (положительное) расстояние между x и нулем.

2 CEIL (х)

Потолок х: наименьшее целое число не менее х

3 см (х, у)

-1, если x <y, 0, если x == y, или 1, если x> y

4 ехр (х)

Экспонента х: е х

5 FABS (х)

Абсолютное значение х.

6 пол (х)

Этаж х: наибольшее целое число не больше х

7 войти (х)

Натуральный логарифм х, для х> 0

8 log10 (х)

Основание-10 логарифм х для х> 0.

9 max (x1, x2, …)

Самый большой из его аргументов: значение, близкое к положительной бесконечности

10 мин (х1, х2, …)

Наименьший из его аргументов: значение, близкое к отрицательной бесконечности

11 MODF (х)

Дробная и целая части x в кортеже из двух элементов. Обе части имеют тот же знак, что и х. Целочисленная часть возвращается как число с плавающей точкой.

12 Пау (х, у)

Значение х ** у.

13 раунд (x [, n])

х округляется до n цифр от десятичной точки. Питон округляет от нуля как тай-брейк: раунд (0,5) равен 1,0, а раунд (-0,5) равен -1,0.

14 SQRT (х)

Квадратный корень из х для х> 0

Абсолютное значение x: (положительное) расстояние между x и нулем.

Потолок х: наименьшее целое число не менее х

-1, если x <y, 0, если x == y, или 1, если x> y

Экспонента х: е х

Абсолютное значение х.

Этаж х: наибольшее целое число не больше х

Натуральный логарифм х, для х> 0

Основание-10 логарифм х для х> 0.

Самый большой из его аргументов: значение, близкое к положительной бесконечности

Наименьший из его аргументов: значение, близкое к отрицательной бесконечности

Дробная и целая части x в кортеже из двух элементов. Обе части имеют тот же знак, что и х. Целочисленная часть возвращается как число с плавающей точкой.

Значение х ** у.

х округляется до n цифр от десятичной точки. Питон округляет от нуля как тай-брейк: раунд (0,5) равен 1,0, а раунд (-0,5) равен -1,0.

Квадратный корень из х для х> 0

Функции случайных чисел

Случайные числа используются для игр, симуляций, тестирования, приложений безопасности и конфиденциальности. Python включает в себя следующие функции, которые обычно используются.

Sr.No. Описание функции
1 выбор (далее)

Случайный элемент из списка, кортежа или строки.

2 randrange ([start,] stop [, step])

Случайно выбранный элемент из диапазона (начало, остановка, шаг)

3 случайным образом ()

Случайное число с плавающей точкой r, такое, что 0 меньше или равно r, а r меньше 1

4 семена ([х])

Устанавливает целочисленное начальное значение, используемое при генерации случайных чисел. Вызовите эту функцию перед вызовом любой другой функции случайного модуля. Возвращает Нет.

5 перетасовка (ЛСТ)

Рандомизирует элементы списка на месте. Возвращает Нет.

6 униформа (х, у)

Случайное число с плавающей точкой r, такое, что x меньше или равно r, а r меньше y

Случайный элемент из списка, кортежа или строки.

Случайно выбранный элемент из диапазона (начало, остановка, шаг)

Случайное число с плавающей точкой r, такое, что 0 меньше или равно r, а r меньше 1

Устанавливает целочисленное начальное значение, используемое при генерации случайных чисел. Вызовите эту функцию перед вызовом любой другой функции случайного модуля. Возвращает Нет.

Рандомизирует элементы списка на месте. Возвращает Нет.

Случайное число с плавающей точкой r, такое, что x меньше или равно r, а r меньше y

Тригонометрические функции

Python включает в себя следующие функции, которые выполняют тригонометрические вычисления.

Sr.No. Описание функции
1 экоса (х)

Верните арккосинус x в радианах.

2 ASIN (х)

Верните дугу синуса х, в радианах.

3 Atan (х)

Верните арктангенс х в радианах.

4 atan2 (у, х)

Вернуть atan (y / x) в радианах.

5 сов (х)

Вернуть косинус x радиан.

6 гипотеза (х, у)

Вернуть евклидову норму, sqrt (x * x + y * y).

7 грех (х)

Верните синус x радиан.

8 тангенс (х)

Верните тангенс х радиан.

9 градусов (х)

Преобразует угол x из радианов в градусы.

10 радиан (х)

Преобразует угол х из градусов в радианы.

Верните арккосинус x в радианах.

Верните дугу синуса х, в радианах.

Верните арктангенс х в радианах.

Вернуть atan (y / x) в радианах.

Вернуть косинус x радиан.

Вернуть евклидову норму, sqrt (x * x + y * y).

Верните синус x радиан.

Верните тангенс х радиан.

Преобразует угол x из радианов в градусы.

Преобразует угол х из градусов в радианы.

Математические константы

Модуль также определяет две математические константы —

Sr.No. Константы и описание
1

число Пи

Математическая константа пи.

2

е

Математическая константа e.

число Пи

Математическая константа пи.

е

Математическая константа e.

Python — Струны

Строки являются одними из самых популярных типов в Python. Мы можем создать их, просто заключив символы в кавычки. Python обрабатывает одинарные кавычки так же, как двойные. Создание строк так же просто, как присвоение значения переменной. Например —

var1 = 'Hello World!'
var2 = "Python Programming"

Доступ к значениям в строках

Python не поддерживает тип символов; они обрабатываются как строки длины один, таким образом также считаются подстрокой.

Чтобы получить доступ к подстрокам, используйте квадратные скобки для нарезки вместе с индексом или индексами, чтобы получить вашу подстроку. Например —

Live Demo

#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

Когда приведенный выше код выполняется, он дает следующий результат —

var1[0]:  H
var2[1:5]:  ytho

Обновление строк

Вы можете «обновить» существующую строку путем (пере) присвоения переменной другой строке. Новое значение может быть связано с его предыдущим значением или с совершенно другой строкой. Например —

Live Demo

#!/usr/bin/python

var1 = 'Hello World!'
print "Updated String :- ", var1[:6] + 'Python'

Когда приведенный выше код выполняется, он дает следующий результат —

Updated String :-  Hello Python

Побег персонажей

Следующая таблица представляет собой список escape-или непечатаемых символов, которые могут быть представлены с помощью обратной косой черты.

Экранирующий персонаж интерпретируется; в одинарных и двойных кавычках.

Обратная косая черта Шестнадцатеричный символ Описание
\ а 0x07 Звонок или оповещение
\ б 0x08 возврат на одну позицию
\ сх Контроль-х
\ Cx Контроль-х
\ е 0x1b Побег
\ е 0x0c Под.стр
\ M- \ Cx Meta-Control-х
\ п 0x0a Новая линия
\ NNN Восьмеричное обозначение, где n находится в диапазоне 0,7
0x0d Возврат каретки
\ s 0x20 Космос
\ т 0x09 табуляция
\ v 0x0B Вертикальная вкладка
\Икс Персонаж х
\ Хпп Шестнадцатеричное обозначение, где n находится в диапазоне 0,9, af или AF

Строковые специальные операторы

Предположим, что строковая переменная a содержит «Hello», а переменная b содержит «Python», тогда —

оператор Описание пример
+ Конкатенация — добавляет значения по обе стороны от оператора a + b даст HelloPython
* Повторение — создает новые строки, объединяя несколько копий одной и той же строки * 2 даст -HelloHello
[] Slice — дает символ из заданного индекса [1] даст е
[:] Range Slice — дает персонажей из заданного диапазона [1: 4] даст все
в Членство — возвращает true, если в указанной строке есть символ H в даст 1
не в Членство — возвращает значение true, если символ не существует в данной строке М не в дадут 1
г / Р Raw String — Подавляет фактическое значение символов Escape. Синтаксис для необработанных строк точно такой же, как и для обычных строк, за исключением оператора необработанной строки, буквы «r», которая предшествует кавычкам. Буква «r» может быть строчной (r) или прописной (R) и должна быть расположена непосредственно перед первой кавычкой. напечатайте r ‘\ n’ print \ n и напечатайте R ‘\ n’prints \ n
% Формат — выполняет форматирование строки Смотрите в следующем разделе

Оператор форматирования строки

Одна из самых крутых возможностей Python — это оператор формата строки%. Этот оператор уникален для строк и компенсирует набор функций из семейства C printf (). Ниже приведен простой пример —

Live Demo

#!/usr/bin/python

print "My name is %s and weight is %d kg!" % ('Zara', 21)

Когда приведенный выше код выполняется, он дает следующий результат —

My name is Zara and weight is 21 kg!

Вот список полного набора символов, который можно использовать вместе с% —

Символ формата преобразование
% с персонаж
% s преобразование строки через str () перед форматированием
знаковое десятичное целое
% d знаковое десятичное целое
% U целое число без знака
% о восьмеричное целое
%Икс шестнадцатеричное целое (строчные буквы)
%ИКС шестнадцатеричное целое (заглавные буквы)
% е экспоненциальная запись (строчными буквами «е»)
% E экспоненциальная запись (с верхним регистром ‘E’)
% е вещественное число с плавающей точкой
короче% f и% e
короче% f и% E

Другие поддерживаемые символы и функции перечислены в следующей таблице.

Условное обозначение функциональность
* аргумент указывает ширину или точность
левое оправдание
+ показать знак
<Зр> оставьте пробел перед положительным числом
# добавьте восьмеричный начальный ноль (‘0’) или шестнадцатеричный ведущий ‘0x’ или ‘0X’, в зависимости от того, были ли использованы ‘x’ или ‘X’.
0 накладка слева с нулями (вместо пробелов)
% «%%» оставляет вас с одним литералом «%»
(Вар) переменная сопоставления (словарные аргументы)
Миннесота m — минимальная общая ширина, а n — количество цифр, отображаемых после десятичной точки (если применимо).

Тройные цитаты

Выручают тройные кавычки Python, позволяя строкам занимать несколько строк, включая дословные NEWLINE, TAB и любые другие специальные символы.

Синтаксис для тройных кавычек состоит из трех последовательных одинарных или двойных кавычек.

Live Demo

#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str

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

this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

Необработанные строки вообще не обрабатывают обратную косую черту как специальный символ. Каждый символ, который вы помещаете в необработанную строку, остается таким же, каким вы его написали —

Live Demo

#!/usr/bin/python

print 'C:\\nowhere'

Когда приведенный выше код выполняется, он дает следующий результат —

C:\nowhere

Теперь давайте воспользуемся необработанной строкой. Мы бы выразили выражение в r’expression ‘ следующим образом:

Live Demo

#!/usr/bin/python

print r'C:\\nowhere'

Когда приведенный выше код выполняется, он дает следующий результат —

C:\\nowhere

Unicode String

Нормальные строки в Python хранятся внутри как 8-битный ASCII, в то время как строки Unicode хранятся как 16-битный Unicode. Это позволяет использовать более разнообразный набор символов, в том числе специальные символы из большинства языков мира. Я ограничу свою обработку строк Unicode следующим:

Live Demo

#!/usr/bin/python

print u'Hello, world!'

Когда приведенный выше код выполняется, он дает следующий результат —

Hello, world!

Как видите, строки Unicode используют префикс u, так же как строки raw используют префикс r.

Встроенные Строковые Методы

Python включает следующие встроенные методы для работы со строками:

Sr.No. Методы с описанием
1 прописные буквы ()

Прописывает первую букву строки

2 центр (ширина, заливка)

Возвращает заполненную пробелами строку с исходной строкой, центрированной по столбцам ширины.

3 count (str, beg = 0, end = len (string))

Подсчитывает, сколько раз встречается str в строке или в подстроке строки, если заданы начальный индекс beg и конечный индекс end.

4 декодирования (кодирование = ‘UTF-8’, ошибки = ‘строгий’)

Декодирует строку с использованием кодека, зарегистрированного для кодирования. по умолчанию используется строковое кодирование по умолчанию.

5 кодирование (кодирование = ‘UTF-8’, ошибки = ‘строгий’)

Возвращает закодированную строковую версию строки; в случае ошибки по умолчанию вызывается ошибка ValueError, если ошибки не указаны с помощью «игнорировать» или «заменить».

6 заканчивается с (суффикс, прошу = 0, конец = длина (строка))

Определяет, заканчивается ли строка или подстрока строки (если задан начальный индекс begin и end index end) суффиксом; возвращает true, если так, и false в противном случае.

7 expandtabs (TabSize = 8)

Расширяет вкладки в строке до нескольких пробелов; по умолчанию 8 пробелов на вкладку, если размер табуляции не указан.

8 найти (str, beg = 0 end = len (string))

Определите, встречается ли str в строке или в подстроке строки, если начальный индекс beg и конечный индекс end заданы, возвращает индекс, если он найден, и -1 в противном случае.

9 index (str, beg = 0, end = len (string))

То же, что find (), но вызывает исключение, если str не найден.

10 isalnum ()

Возвращает true, если строка содержит хотя бы 1 символ, а все символы буквенно-цифровые, в противном случае — false.

11 ISALPHA ()

Возвращает true, если строка содержит хотя бы 1 символ, а все символы в алфавитном порядке и false в противном случае.

12 isdigit ()

Возвращает true, если строка содержит только цифры, и false в противном случае.

13 ISLOWER ()

Возвращает true, если строка содержит хотя бы 1 символ в регистре, а все символы в регистре строчные, в противном случае — false.

14 IsNumeric ()

Возвращает true, если строка Unicode содержит только числовые символы, и false в противном случае.

15 isspace ()

Возвращает true, если строка содержит только пробельные символы, и false в противном случае.

16 istitle ()

Возвращает true, если строка правильно «titlecased» и false в противном случае.

17 ISUPPER ()

Возвращает true, если строка содержит хотя бы один символ в регистре, и все символы в регистре прописные, в противном случае — false.

18 присоединиться (далее)

Объединяет (объединяет) строковые представления элементов последовательности seq в строку со строкой-разделителем.

19 Len (строка)

Возвращает длину строки

20 ljust (width [, fillchar])

Возвращает заполненную пробелами строку с исходной строкой, выровненной по левому краю, с общей шириной столбцов.

21 ниже ()

Преобразует все заглавные буквы в строке в строчные.

22 lstrip ()

Удаляет все начальные пробелы в строке.

23 maketrans ()

Возвращает таблицу перевода, которая будет использоваться в функции перевода.

24 макс (ул)

Возвращает максимальный алфавитный символ из строки str.

25 мин (ул)

Возвращает минимальный алфавитный символ из строки str.

26 заменить (старый, новый [, макс])

Заменяет все вхождения old в string новыми или не более max вхождениями, если задано max.

27 rfind (str, beg = 0, end = len (string))

То же, что find (), но поиск в строке назад.

28 rindex (str, beg = 0, end = len (string))

То же, что index (), но поиск в строке назад.

29 Rjust (ширина, [, fillchar])

Возвращает заполненную пробелами строку с исходной строкой, выровненной по правому краю на сумму столбцов ширины.

30 rstrip ()

Удаляет все завершающие пробелы строки.

31 split (str = «», num = string.count (str))

Разбивает строку в соответствии с разделителем str (пробел, если не указан) и возвращает список подстрок; разбить на самое большее количество подстрок, если дано.

32 splitlines (num = string.count (‘\ n’))

Разбивает строку на все (или num) NEWLINEs и возвращает список каждой строки с удаленными NEWLINEs.

33 начинается с (str, beg = 0, end = len (строка))

Определяет, начинается ли строка или подстрока строки (если задан начальный индекс, начало и конец индекса) с подстроки str; возвращает true, если так, и false в противном случае.

34 полоса ([символы])

Выполняет как lstrip (), так и rstrip () для строки.

35 swapcase ()

Инвертирует регистр для всех букв в строке.

36 заглавие()

Возвращает «stringcased» версию строки, то есть все слова начинаются с заглавной буквы, а остальные строчные.

37 перевести (таблица, deletechars = «»)

Переводит строку в соответствии с таблицей перевода str (256 символов), удаляя их из строки del.

38 Верхняя ()

Преобразует строчные буквы в строке в прописные.

39 zfill (ширина)

Возвращает исходную строку, заполненную нулями слева, до общей ширины символов; предназначен для чисел, zfill () сохраняет любой заданный знак (кроме одного нуля).

40 isdecimal ()

Возвращает true, если строка Unicode содержит только десятичные символы, и false в противном случае.

Прописывает первую букву строки

Возвращает заполненную пробелами строку с исходной строкой, центрированной по столбцам ширины.

Подсчитывает, сколько раз встречается str в строке или в подстроке строки, если заданы начальный индекс beg и конечный индекс end.

Декодирует строку с использованием кодека, зарегистрированного для кодирования. по умолчанию используется строковое кодирование по умолчанию.

Возвращает закодированную строковую версию строки; в случае ошибки по умолчанию вызывается ошибка ValueError, если ошибки не указаны с помощью «игнорировать» или «заменить».

Определяет, заканчивается ли строка или подстрока строки (если задан начальный индекс begin и end index end) суффиксом; возвращает true, если так, и false в противном случае.

Расширяет вкладки в строке до нескольких пробелов; по умолчанию 8 пробелов на вкладку, если размер табуляции не указан.

Определите, встречается ли str в строке или в подстроке строки, если начальный индекс beg и конечный индекс end заданы, возвращает индекс, если он найден, и -1 в противном случае.

То же, что find (), но вызывает исключение, если str не найден.

Возвращает true, если строка содержит хотя бы 1 символ, а все символы буквенно-цифровые, в противном случае — false.

Возвращает true, если строка содержит хотя бы 1 символ, а все символы в алфавитном порядке и false в противном случае.

Возвращает true, если строка содержит только цифры, и false в противном случае.

Возвращает true, если строка содержит хотя бы 1 символ в регистре, а все символы в регистре строчные, в противном случае — false.

Возвращает true, если строка Unicode содержит только числовые символы, и false в противном случае.

Возвращает true, если строка содержит только пробельные символы, и false в противном случае.

Возвращает true, если строка правильно «titlecased» и false в противном случае.

Возвращает true, если строка содержит хотя бы один символ в регистре, и все символы в регистре прописные, в противном случае — false.

Объединяет (объединяет) строковые представления элементов последовательности seq в строку со строкой-разделителем.

Возвращает длину строки

Возвращает заполненную пробелами строку с исходной строкой, выровненной по левому краю, с общей шириной столбцов.

Преобразует все заглавные буквы в строке в строчные.

Удаляет все начальные пробелы в строке.

Возвращает таблицу перевода, которая будет использоваться в функции перевода.

Возвращает максимальный алфавитный символ из строки str.

Возвращает минимальный алфавитный символ из строки str.

Заменяет все вхождения old в string новыми или не более max вхождениями, если задано max.

То же, что find (), но поиск в строке назад.

То же, что index (), но поиск в строке назад.

Возвращает заполненную пробелами строку с исходной строкой, выровненной по правому краю на сумму столбцов ширины.

Удаляет все завершающие пробелы строки.

Разбивает строку в соответствии с разделителем str (пробел, если не указан) и возвращает список подстрок; разбить на самое большее количество подстрок, если дано.

Разбивает строку на все (или num) NEWLINEs и возвращает список каждой строки с удаленными NEWLINEs.

Определяет, начинается ли строка или подстрока строки (если задан начальный индекс, начало и конец индекса) с подстроки str; возвращает true, если так, и false в противном случае.

Выполняет как lstrip (), так и rstrip () для строки.

Инвертирует регистр для всех букв в строке.

Возвращает «stringcased» версию строки, то есть все слова начинаются с заглавной буквы, а остальные строчные.

Переводит строку в соответствии с таблицей перевода str (256 символов), удаляя их из строки del.

Преобразует строчные буквы в строке в прописные.

Возвращает исходную строку, заполненную нулями слева, до общей ширины символов; предназначен для чисел, zfill () сохраняет любой заданный знак (кроме одного нуля).

Возвращает true, если строка Unicode содержит только десятичные символы, и false в противном случае.

Python — Списки

Основная структура данных в Python — это последовательность . Каждому элементу последовательности присваивается номер — его позиция или индекс. Первый индекс равен нулю, второй индекс равен единице и т. Д.

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

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

Списки Python

Список — это наиболее универсальный тип данных, доступный в Python, который можно записать в виде списка значений (элементов), разделенных запятыми, в квадратных скобках. Важным моментом в списке является то, что элементы в списке не обязательно должны быть одного типа.

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

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"]

Подобно строковым индексам, индексы списков начинаются с 0, и списки могут быть нарезаны, объединены и так далее.

Доступ к значениям в списках

Чтобы получить доступ к значениям в списках, используйте квадратные скобки для нарезки вместе с индексом или индексами, чтобы получить значение, доступное по этому индексу. Например —

Live Demo

#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

Когда приведенный выше код выполняется, он дает следующий результат —

list1[0]:  physics
list2[1:5]:  [2, 3, 4, 5]

Обновление списков

Вы можете обновить один или несколько элементов списков, задав срез в левой части оператора присваивания, и вы можете добавлять элементы в список с помощью метода append (). Например —

Live Demo

#!/usr/bin/python

list = ['physics', 'chemistry', 1997, 2000];
print "Value available at index 2 : "
print list[2]
list[2] = 2001;
print "New value available at index 2 : "
print list[2]

Примечание. Метод append () обсуждается в следующем разделе.

Когда приведенный выше код выполняется, он дает следующий результат —

Value available at index 2 :
1997
New value available at index 2 :
2001

Удалить элементы списка

Чтобы удалить элемент списка, вы можете использовать либо оператор del, если вы точно знаете, какие элементы вы удаляете, либо метод remove (), если вы не знаете. Например —

Live Demo

#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
print list1
del list1[2];
print "After deleting value at index 2 : "
print list1

Когда приведенный выше код выполняется, он дает следующий результат —

['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 :
['physics', 'chemistry', 2000]

Примечание. Метод remove () обсуждается в следующем разделе.

Основные операции со списком

Списки реагируют на операторы + и * так же, как строки; они также означают конкатенацию и повторение, за исключением того, что результатом является новый список, а не строка.

Фактически списки отвечают на все основные операции последовательности, которые мы использовали со строками в предыдущей главе.

Выражение Python Результаты Описание
len ([1, 2, 3]) 3 длина
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] конкатенация
[‘Привет!’] * 4 [«Привет!», «Привет!», «Привет!», «Привет!»] Репетиция
3 в [1, 2, 3] Правда членство
для х в [1, 2, 3]: выведите х, 1 2 3 итерация

Индексирование, нарезка и матрицы

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

Предполагая следующий ввод —

L = ['spam', 'Spam', 'SPAM!']

Выражение Python Результаты Описание
L [2] СПАМ! Смещения начинаются с нуля
L [-2] Спам Отрицательный: считать справа
L [1:] [«Спам», «СПАМ!»] Нарезка выборок разделов

Встроенные функции и методы списка

Python включает в себя следующие функции списка —

Sr.No. Функция с описанием
1 cmp (list1, list2)

Сравнивает элементы обоих списков.

2 Len (список)

Дает общую длину списка.

3 макс (список)

Возвращает элемент из списка с максимальным значением.

4 мин (список)

Возвращает элемент из списка с минимальным значением.

5 список (далее)

Преобразует кортеж в список.

Сравнивает элементы обоих списков.

Дает общую длину списка.

Возвращает элемент из списка с максимальным значением.

Возвращает элемент из списка с минимальным значением.

Преобразует кортеж в список.

Python включает следующие методы списка

Sr.No. Методы с описанием
1 list.append (OBJ)

Добавляет объект в список

2 list.count (OBJ)

Возвращает количество раз, сколько obj встречается в списке

3 list.extend (сл)

Добавляет содержимое seq в список

4 list.index (OBJ)

Возвращает самый низкий индекс в списке, который появляется obj

5 list.insert (index, obj)

Вставляет объект obj в список по индексу смещения

6 list.pop (OBJ = Список [-1])

Удаляет и возвращает последний объект или объект из списка

7 list.remove (OBJ)

Удаляет объект obj из списка

8 list.reverse ()

Переворачивает объекты списка на месте

9 list.sort ([FUNC])

Сортирует объекты списка, используйте функцию сравнения, если дано

Добавляет объект в список

Возвращает количество раз, сколько obj встречается в списке

Добавляет содержимое seq в список

Возвращает самый низкий индекс в списке, который появляется obj

Вставляет объект obj в список по индексу смещения

Удаляет и возвращает последний объект или объект из списка

Удаляет объект obj из списка

Переворачивает объекты списка на месте

Сортирует объекты списка, используйте функцию сравнения, если дано

Python — кортежи

Кортеж — это последовательность неизменяемых объектов Python. Кортежи — это последовательности, как списки. Различия между кортежами и списками заключаются в том, что они не могут быть изменены в отличие от списков, а кортежи используют круглые скобки, тогда как списки используют квадратные скобки.

Создать кортеж так же просто, как поставить различные значения через запятую. При желании вы можете также поставить эти значения через запятую в скобках. Например —

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";

Пустой кортеж записывается в виде двух круглых скобок, не содержащих ничего —

tup1 = ();

Чтобы написать кортеж, содержащий одно значение, вы должны включить запятую, даже если есть только одно значение —

tup1 = (50,);

Как и строковые индексы, индексы кортежей начинаются с 0 и могут быть разрезаны, объединены и т. Д.

Доступ к значениям в кортежах

Чтобы получить доступ к значениям в кортеже, используйте квадратные скобки для нарезки вместе с индексом или индексами, чтобы получить значение, доступное по этому индексу. Например —

Live Demo

#!/usr/bin/python

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5, 6, 7 );
print "tup1[0]: ", tup1[0];
print "tup2[1:5]: ", tup2[1:5];

Когда приведенный выше код выполняется, он дает следующий результат —

tup1[0]:  physics
tup2[1:5]:  [2, 3, 4, 5]

Обновление кортежей

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

Live Demo

#!/usr/bin/python

tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');

# Following action is not valid for tuples
# tup1[0] = 100;

# So let's create a new tuple as follows
tup3 = tup1 + tup2;
print tup3;

Когда приведенный выше код выполняется, он дает следующий результат —

(12, 34.56, 'abc', 'xyz')

Удалить элементы кортежа

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

Чтобы явно удалить весь кортеж, просто используйте оператор del . Например —

Live Demo

#!/usr/bin/python

tup = ('physics', 'chemistry', 1997, 2000);
print tup;
del tup;
print "After deleting tup : ";
print tup;

Это дает следующий результат. Обратите внимание на возникшее исключение, это потому, что после кортежа дель Туп больше не существует —

('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
   File "test.py", line 9, in <module>
      print tup;
NameError: name 'tup' is not defined

Основные операции кортежей

Кортежи отвечают на операторы + и * так же, как строки; они также означают конкатенацию и повторение, за исключением того, что результатом является новый кортеж, а не строка.

Фактически, кортежи отвечают на все общие операции последовательности, которые мы использовали со строками в предыдущей главе —

Выражение Python Результаты Описание
len ((1, 2, 3)) 3 длина
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) конкатенация
(«Привет!»,) * 4 («Привет!», «Привет!», «Привет!», «Привет!») Репетиция
3 дюйма (1, 2, 3) Правда членство
для x in (1, 2, 3): выведите x, 1 2 3 итерация

Индексирование, нарезка и матрицы

Поскольку кортежи являются последовательностями, индексирование и секционирование для кортежей работают так же, как и для строк. Предполагая следующий ввод —

L = ('spam', 'Spam', 'SPAM!')

Выражение Python Результаты Описание
L [2] ‘СПАМ!’ Смещения начинаются с нуля
L [-2] ‘Спам’ Отрицательный: считать справа
L [1:] [«Спам», «СПАМ!»] Нарезка выборок разделов

Без ограничителей

Любой набор из нескольких объектов, разделенных запятыми, записанный без идентифицирующих символов, т. Е. Скобки для списков, скобки для кортежей и т. Д., По умолчанию кортежи, как указано в этих коротких примерах —

Live Demo

#!/usr/bin/python

print 'abc', -4.24e93, 18+6.6j, 'xyz';
x, y = 1, 2;
print "Value of x , y : ", x,y;

Когда приведенный выше код выполняется, он дает следующий результат —

abc -4.24e+93 (18+6.6j) xyz
Value of x , y : 1 2

Встроенные функции кортежей

Python включает в себя следующие функции кортежей —

Sr.No. Функция с описанием
1 cmp (tuple1, tuple2)

Сравнивает элементы обоих кортежей.

2 Len (кортеж)

Дает общую длину кортежа.

3 макс (кортеж)

Возвращает элемент из кортежа с максимальным значением.

4 мин (кортеж)

Возвращает элемент из кортежа с минимальным значением.

5 кортеж (сл)

Преобразует список в кортеж.

Сравнивает элементы обоих кортежей.

Дает общую длину кортежа.

Возвращает элемент из кортежа с максимальным значением.

Возвращает элемент из кортежа с минимальным значением.

Преобразует список в кортеж.

Python — словарь

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

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

Доступ к значениям в словаре

Чтобы получить доступ к элементам словаря, вы можете использовать знакомые квадратные скобки вместе с ключом, чтобы получить его значение. Ниже приведен простой пример —

Live Demo

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']

Когда приведенный выше код выполняется, он дает следующий результат —

dict['Name']:  Zara
dict['Age']:  7

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

Live Demo

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Alice']: ", dict['Alice']

Когда приведенный выше код выполняется, он дает следующий результат —

dict['Alice']:
Traceback (most recent call last):
   File "test.py", line 4, in <module>
      print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'

Обновление словаря

Вы можете обновить словарь, добавив новую запись или пару ключ-значение, изменив существующую запись или удалив существующую запись, как показано ниже в простом примере —

Live Demo

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

Когда приведенный выше код выполняется, он дает следующий результат —

dict['Age']:  8
dict['School']:  DPS School

Удалить элементы словаря

Вы можете удалить отдельные элементы словаря или очистить все содержимое словаря. Вы также можете удалить весь словарь за одну операцию.

Чтобы явно удалить весь словарь, просто используйте оператор del . Ниже приведен простой пример —

Live Demo

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name']; # remove entry with key 'Name'
dict.clear();     # remove all entries in dict
del dict ;        # delete entire dictionary

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

Это дает следующий результат. Обратите внимание, что возникает исключение, потому что после словаря del dict больше не существует —

dict['Age']:
Traceback (most recent call last):
   File "test.py", line 8, in <module>
      print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

Примечание. Метод del () обсуждается в следующем разделе.

Свойства словарных ключей

Значения словаря не имеют ограничений. Это может быть любой произвольный объект Python, либо стандартные объекты, либо определяемые пользователем объекты. Однако то же самое не относится к ключам.

Есть два важных момента, которые следует помнить о словарных ключах —

(а) Не допускается более одной записи на ключ. Это означает, что дубликат ключа не допускается. Когда дубликаты ключей встречаются во время назначения, побеждает последнее назначение. Например —

Live Demo

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print "dict['Name']: ", dict['Name']

Когда приведенный выше код выполняется, он дает следующий результат —

dict['Name']:  Manni

(б) Ключи должны быть неизменными. Это означает, что вы можете использовать строки, числа или кортежи в качестве ключей словаря, но что-то вроде [‘key’] не допускается. Ниже приведен простой пример —

Live Demo

#!/usr/bin/python

dict = {['Name']: 'Zara', 'Age': 7}
print "dict['Name']: ", dict['Name']

Когда приведенный выше код выполняется, он дает следующий результат —

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      dict = {['Name']: 'Zara', 'Age': 7};
TypeError: unhashable type: 'list'

Встроенные словарные функции и методы

Python включает в себя следующие функции словаря —

Sr.No. Функция с описанием
1 cmp (dict1, dict2)

Сравнивает элементы обоих dict.

2 Len (ДИКТ)

Дает общую длину словаря. Это будет равно количеству элементов в словаре.

3 ул (ДИКТ)

Создает печатное строковое представление словаря

4 Тип (переменная)

Возвращает тип переданной переменной. Если переданная переменная является словарем, то она возвращает тип словаря.

Сравнивает элементы обоих dict.

Дает общую длину словаря. Это будет равно количеству элементов в словаре.

Создает печатное строковое представление словаря

Возвращает тип переданной переменной. Если переданная переменная является словарем, то она возвращает тип словаря.

Python включает следующие словарные методы —

Sr.No. Методы с описанием
1 dict.clear ()

Удаляет все элементы словаря dict

2 dict.copy ()

Возвращает мелкую копию словаря dict

3 dict.fromkeys ()

Создайте новый словарь с ключами из seq и значениями, установленными в значение .

4 dict.get (ключ, по умолчанию = Нет)

Для ключа key возвращает значение или значение по умолчанию, если ключ отсутствует в словаре

5 dict.has_key (ключ)

Возвращает true, если ключ в словаре dict , false в противном случае

6 dict.items ()

Возвращает список пар кортежей dict (ключ, значение)

7 dict.keys ()

Возвращает список ключей словаря dict

8 dict.setdefault (ключ, по умолчанию = Нет)

Аналогичен get (), но установит dict [ключ] = по умолчанию, если ключ еще не в dict

9 dict.update (dict2)

Добавляет пары словарь-значение dict2 в dict

10 dict.values ()

Возвращает список значений словаря dict

Удаляет все элементы словаря dict

Возвращает мелкую копию словаря dict

Создайте новый словарь с ключами из seq и значениями, установленными в значение .

Для ключа key возвращает значение или значение по умолчанию, если ключ отсутствует в словаре

Возвращает true, если ключ в словаре dict , false в противном случае

Возвращает список пар кортежей dict (ключ, значение)

Возвращает список ключей словаря dict

Аналогичен get (), но установит dict [ключ] = по умолчанию, если ключ еще не в dict

Добавляет пары словарь-значение dict2 в dict

Возвращает список значений словаря dict

Python — дата и время

Программа Python может обрабатывать дату и время несколькими способами. Преобразование между форматами даты — обычная задача для компьютеров. Модули времени и календаря Python помогают отслеживать дату и время.

Что такое тик?

Временные интервалы — это числа с плавающей точкой в ​​секундах. Особые моменты времени выражаются в секундах с 12:00 утра, 1 января 1970 года (эпоха).

В Python есть популярный модуль времени, который предоставляет функции для работы со временем и для преобразования между представлениями. Функция time.time () возвращает текущее системное время в тиках с 12:00, 1 января 1970 года (эпоха).

пример

Live Demo

#!/usr/bin/python
import time;  # This is required to include time module.

ticks = time.time()
print "Number of ticks since 12:00am, January 1, 1970:", ticks

Это приведет к следующему результату:

Number of ticks since 12:00am, January 1, 1970: 7186862.73399

Арифметика даты легко сделать с помощью галочек. Однако даты до эпохи не могут быть представлены в этой форме. Даты в далеком будущем также не могут быть представлены таким образом — точка отсечения наступает где-то в 2038 году для UNIX и Windows.

Что такое TimeTuple?

Многие из функций времени Python обрабатывают время как кортеж из 9 чисел, как показано ниже —

Индекс поле Ценности
0 4-значный год 2008
1 Месяц От 1 до 12
2 День От 1 до 31
3 Час От 0 до 23
4 минут От 0 до 59
5 второй От 0 до 61 (60 или 61 — високосные секунды)
6 День недели От 0 до 6 (0 — понедельник)
7 День года С 1 по 366 (юлианский день)
8 Дневного сбережения -1, 0, 1, -1 означает, что библиотека определяет DST

Вышеуказанный кортеж эквивалентен структуре struct_time . Эта структура имеет следующие атрибуты —

Индекс Атрибуты Ценности
0 tm_year 2008
1 tm_mon От 1 до 12
2 tm_mday От 1 до 31
3 tm_hour От 0 до 23
4 tm_min От 0 до 59
5 tm_sec От 0 до 61 (60 или 61 — високосные секунды)
6 tm_wday От 0 до 6 (0 — понедельник)
7 tm_yday С 1 по 366 (юлианский день)
8 tm_isdst -1, 0, 1, -1 означает, что библиотека определяет DST

Получение текущего времени

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

Live Demo

#!/usr/bin/python
import time;

localtime = time.localtime(time.time())
print "Local current time :", localtime

Это приведет к следующему результату, который может быть отформатирован в любой другой презентабельной форме —

Local current time : time.struct_time(tm_year=2013, tm_mon=7, 
tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)

Получение отформатированного времени

Вы можете отформатировать любое время в соответствии с вашими требованиями, но простой способ получить время в удобочитаемом формате — asctime () —

Live Demo

#!/usr/bin/python
import time;

localtime = time.asctime( time.localtime(time.time()) )
print "Local current time :", localtime

Это даст следующий результат —

Local current time : Tue Jan 13 10:17:09 2009

Получение календаря на месяц

Модуль календаря предоставляет широкий спектр методов для игры с годовыми и ежемесячными календарями. Здесь мы печатаем календарь на данный месяц (январь 2008) —

Live Demo

#!/usr/bin/python
import calendar

cal = calendar.month(2008, 1)
print "Here is the calendar:"
print cal

Это даст следующий результат —

Here is the calendar:
   January 2008
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Модуль времени

В Python есть популярный модуль времени, который предоставляет функции для работы со временем и для преобразования между представлениями. Вот список всех доступных методов —

Sr.No. Функция с описанием
1 time.altzone

Смещение местного часового пояса DST в секундах к западу от UTC, если оно определено. Это отрицательно, если местный часовой пояс DST расположен к востоку от UTC (как в Западной Европе, включая Великобританию). Используйте это только если дневной свет ненулевой.

2 time.asctime ([tupletime])

Принимает кортеж времени и возвращает читаемую 24-символьную строку, например, «Tue Dec 11 18:07:14 2008».

3 time.clock ()

Возвращает текущее время процессора в виде числа с плавающей запятой в секундах. Для измерения вычислительных затрат различных подходов значение time.clock более полезно, чем time.time ().

4 time.ctime ([сек])

Как asctime (localtime (secs)) и без аргументов, как asctime ()

5 time.gmtime ([сек])

Принимает момент, выраженный в секундах с начала эпохи, и возвращает кортеж времени t с временем UTC. Примечание: t.tm_isdst всегда 0

6 time.localtime ([сек])

Принимает момент, выраженный в секундах с начала эпохи, и возвращает кортеж времени t с местным временем (t.tm_isdst равно 0 или 1, в зависимости от того, применяется ли DST к мгновенным секундам по локальным правилам).

7 time.mktime (tupletime)

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

8 time.sleep (сек)

Приостанавливает вызывающий поток на секунды.

9 time.strftime (FMT [, tupletime])

Принимает момент, выраженный как кортеж времени по местному времени, и возвращает строку, представляющую момент, как указано в строке fmt.

10 time.strptime (str, fmt = ‘% a% b% d% H:% M:% S% Y’)

Анализирует str в соответствии со строкой формата fmt и возвращает момент в формате кортежа времени.

11 time.time ()

Возвращает текущий момент времени, число с плавающей запятой в секундах с начала эпохи.

12 time.tzset ()

Сбрасывает правила преобразования времени, используемые библиотечными процедурами. Переменная окружения TZ определяет, как это делается.

Смещение местного часового пояса DST в секундах к западу от UTC, если оно определено. Это отрицательно, если местный часовой пояс DST расположен к востоку от UTC (как в Западной Европе, включая Великобританию). Используйте это только если дневной свет ненулевой.

Принимает кортеж времени и возвращает читаемую 24-символьную строку, например, «Tue Dec 11 18:07:14 2008».

Возвращает текущее время процессора в виде числа с плавающей запятой в секундах. Для измерения вычислительных затрат различных подходов значение time.clock более полезно, чем time.time ().

Как asctime (localtime (secs)) и без аргументов, как asctime ()

Принимает момент, выраженный в секундах с начала эпохи, и возвращает кортеж времени t с временем UTC. Примечание: t.tm_isdst всегда 0

Принимает момент, выраженный в секундах с начала эпохи, и возвращает кортеж времени t с местным временем (t.tm_isdst равно 0 или 1, в зависимости от того, применяется ли DST к мгновенным секундам по локальным правилам).

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

Приостанавливает вызывающий поток на секунды.

Принимает момент, выраженный как кортеж времени по местному времени, и возвращает строку, представляющую момент, как указано в строке fmt.

Анализирует str в соответствии со строкой формата fmt и возвращает момент в формате кортежа времени.

Возвращает текущий момент времени, число с плавающей запятой в секундах с начала эпохи.

Сбрасывает правила преобразования времени, используемые библиотечными процедурами. Переменная окружения TZ определяет, как это делается.

Давайте кратко рассмотрим функции —

Следующие два важных атрибута доступны с модулем времени —

Sr.No. Атрибут с описанием
1

time.timezone

Атрибут time.timezone — это смещение в секундах местного часового пояса (без перехода на летнее время) от UTC (> 0 в Северной и Южной Америке; <= 0 в большинстве стран Европы, Азии, Африки).

2

time.tzname

Атрибут time.tzname представляет собой пару строк, зависящих от локали, которые являются именами местного часового пояса без и с DST соответственно.

time.timezone

Атрибут time.timezone — это смещение в секундах местного часового пояса (без перехода на летнее время) от UTC (> 0 в Северной и Южной Америке; <= 0 в большинстве стран Европы, Азии, Африки).

time.tzname

Атрибут time.tzname представляет собой пару строк, зависящих от локали, которые являются именами местного часового пояса без и с DST соответственно.

Модуль календаря

Модуль календаря предоставляет функции, связанные с календарем, в том числе функции для печати текстового календаря на определенный месяц или год.

По умолчанию в календаре первый день недели — понедельник, а последний — воскресенье. Чтобы изменить это, вызовите функцию calendar.setfirstweekday ().

Вот список функций, доступных с модулем календаря

Sr.No. Функция с описанием
1

calendar.calendar (год, ш = 2, л = 1, с = 6)

Возвращает многострочную строку с календарем для года, отформатированного в три столбца, разделенных пробелами c. w — ширина в символах каждой даты; каждая строка имеет длину 21 * w + 18 + 2 * c. l — количество строк за каждую неделю.

2

calendar.firstweekday ()

Возвращает текущую настройку для дня недели, который начинается каждую неделю. По умолчанию при первом импортировании календаря это 0, что означает понедельник.

3

calendar.isleap (год)

Возвращает True, если год является високосным; в противном случае Ложь.

4

calendar.leapdays (y1, y2)

Возвращает общее количество високосных дней в годах в пределах диапазона (y1, y2).

5

calendar.month (год, месяц, ш = 2, L = 1)

Возвращает многострочную строку с календарем на месяц месяц год, одну строку в неделю плюс две строки заголовка. w — ширина в символах каждой даты; каждая строка имеет длину 7 * w + 6. l — количество строк за каждую неделю.

6

calendar.monthcalendar (год, месяц)

Возвращает список списков целых. Каждый подсписок обозначает неделю. Дни вне месяца, месяца, года и года установлены на 0; дни в месяце устанавливаются на их день месяца, 1 и выше.

7

calendar.monthrange (год, месяц)

Возвращает два целых числа. Первый — это код дня недели для первого дня месяца месяца в году; второй — количество дней в месяце. Коды дня недели: от 0 (понедельник) до 6 (воскресенье); номера месяцев от 1 до 12.

8

calendar.prcal (год, ш = 2, л = 1, с = 6)

Как печатать calendar.calendar (год, ш, л, в).

9

calendar.prmonth (год, месяц, ш = 2, L = 1)

Как печать calendar.month (год, месяц, ш, л).

10

calendar.setfirstweekday (день недели)

Устанавливает первый день каждой недели в код дня недели. Коды дня недели: от 0 (понедельник) до 6 (воскресенье).

11

calendar.timegm (tupletime)

Инверсия time.gmtime: принимает момент времени в форме кортежа и возвращает тот же момент, что и число с плавающей запятой в секундах с начала эпохи.

12

calendar.weekday (год, месяц, день)

Возвращает код дня недели для указанной даты. Коды дня недели: от 0 (понедельник) до 6 (воскресенье); номера месяцев от 1 (январь) до 12 (декабрь).

calendar.calendar (год, ш = 2, л = 1, с = 6)

Возвращает многострочную строку с календарем для года, отформатированного в три столбца, разделенных пробелами c. w — ширина в символах каждой даты; каждая строка имеет длину 21 * w + 18 + 2 * c. l — количество строк за каждую неделю.

calendar.firstweekday ()

Возвращает текущую настройку для дня недели, который начинается каждую неделю. По умолчанию при первом импортировании календаря это 0, что означает понедельник.

calendar.isleap (год)

Возвращает True, если год является високосным; в противном случае Ложь.

calendar.leapdays (y1, y2)

Возвращает общее количество високосных дней в годах в пределах диапазона (y1, y2).

calendar.month (год, месяц, ш = 2, L = 1)

Возвращает многострочную строку с календарем на месяц месяц год, одну строку в неделю плюс две строки заголовка. w — ширина в символах каждой даты; каждая строка имеет длину 7 * w + 6. l — количество строк за каждую неделю.

calendar.monthcalendar (год, месяц)

Возвращает список списков целых. Каждый подсписок обозначает неделю. Дни вне месяца, месяца, года и года установлены на 0; дни в месяце устанавливаются на их день месяца, 1 и выше.

calendar.monthrange (год, месяц)

Возвращает два целых числа. Первый — это код дня недели для первого дня месяца месяца в году; второй — количество дней в месяце. Коды дня недели: от 0 (понедельник) до 6 (воскресенье); номера месяцев от 1 до 12.

calendar.prcal (год, ш = 2, л = 1, с = 6)

Как печатать calendar.calendar (год, ш, л, в).

calendar.prmonth (год, месяц, ш = 2, L = 1)

Как печать calendar.month (год, месяц, ш, л).

calendar.setfirstweekday (день недели)

Устанавливает первый день каждой недели в код дня недели. Коды дня недели: от 0 (понедельник) до 6 (воскресенье).

calendar.timegm (tupletime)

Инверсия time.gmtime: принимает момент времени в форме кортежа и возвращает тот же момент, что и число с плавающей запятой в секундах с начала эпохи.

calendar.weekday (год, месяц, день)

Возвращает код дня недели для указанной даты. Коды дня недели: от 0 (понедельник) до 6 (воскресенье); номера месяцев от 1 (январь) до 12 (декабрь).

Другие модули и функции

Если вам интересно, то здесь вы найдете список других важных модулей и функций для игры с датой и временем в Python —

Модуль даты и времени

Модуль Pytz

Модуль dateutil

Python — Функции

Функция — это блок организованного, многократно используемого кода, который используется для выполнения одного связанного действия. Функции обеспечивают лучшую модульность для вашего приложения и высокую степень повторного использования кода.

Как вы уже знаете, Python предоставляет вам множество встроенных функций, таких как print () и т. Д., Но вы также можете создавать свои собственные функции. Эти функции называются пользовательскими функциями.

Определение функции

Вы можете определить функции для обеспечения необходимой функциональности. Вот простые правила для определения функции в Python.

  • Функциональные блоки начинаются с ключевого слова def, за которым следуют имя функции и круглые скобки (()).

  • Любые входные параметры или аргументы должны быть помещены в эти круглые скобки. Вы также можете определить параметры внутри этих скобок.

  • Первым оператором функции может быть необязательный оператор — строка документации функции или строка документации.

  • Блок кода в каждой функции начинается с двоеточия (:) и имеет отступ.

  • Оператор return [выражение] выходит из функции, необязательно передавая выражение вызывающей стороне. Оператор return без аргументов аналогичен return None.

Функциональные блоки начинаются с ключевого слова def, за которым следуют имя функции и круглые скобки (()).

Любые входные параметры или аргументы должны быть помещены в эти круглые скобки. Вы также можете определить параметры внутри этих скобок.

Первым оператором функции может быть необязательный оператор — строка документации функции или строка документации.

Блок кода в каждой функции начинается с двоеточия (:) и имеет отступ.

Оператор return [выражение] выходит из функции, необязательно передавая выражение вызывающей стороне. Оператор return без аргументов аналогичен return None.

Синтаксис

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

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

пример

Следующая функция принимает строку в качестве входного параметра и печатает ее на стандартном экране.

def printme( str ):
   "This prints a passed string into this function"
   print str
   return

Вызов функции

Определение функции только дает ей имя, определяет параметры, которые должны быть включены в функцию, и структурирует блоки кода.

Как только базовая структура функции завершена, вы можете выполнить ее, вызвав ее из другой функции или непосредственно из приглашения Python. Ниже приведен пример вызова функции printme ():

Live Demo

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")

Когда приведенный выше код выполняется, он дает следующий результат —

I'm first call to user defined function!
Again second call to the same function

Передача по ссылке против значения

Все параметры (аргументы) в языке Python передаются по ссылке. Это означает, что если вы изменяете то, на что ссылается параметр в функции, это изменение также отражается в вызывающей функции. Например —

Live Demo

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist.append([1,2,3,4]);
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Здесь мы поддерживаем ссылку на переданный объект и добавляем значения в один и тот же объект. Таким образом, это приведет к следующему результату —

Values inside the function:  [10, 20, 30, [1, 2, 3, 4]]
Values outside the function:  [10, 20, 30, [1, 2, 3, 4]]

Есть еще один пример, когда аргумент передается по ссылке, а ссылка перезаписывается внутри вызываемой функции.

Live Demo

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4]; # This would assig new reference in mylist
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Параметр mylist является локальным для функции changeme. Изменение mylist внутри функции не влияет на mylist . Функция ничего не выполняет, и, наконец, это приведет к следующему результату:

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

Аргументы функции

Вы можете вызвать функцию, используя следующие типы формальных аргументов:

  • Обязательные аргументы
  • Ключевые аргументы
  • Аргументы по умолчанию
  • Аргументы переменной длины

Обязательные аргументы

Обязательные аргументы — это аргументы, переданные функции в правильном позиционном порядке. Здесь количество аргументов в вызове функции должно точно соответствовать определению функции.

Чтобы вызвать функцию printme () , вам обязательно нужно передать один аргумент, иначе она выдаст синтаксическую ошибку следующим образом:

Live Demo

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme()

Когда приведенный выше код выполняется, он дает следующий результат —

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

Ключевые аргументы

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

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

Live Demo

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme( str = "My string")

Когда приведенный выше код выполняется, он дает следующий результат —

My string

Следующий пример дает более четкую картину. Обратите внимание, что порядок параметров не имеет значения.

Live Demo

#!/usr/bin/python

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )

Когда приведенный выше код выполняется, он дает следующий результат —

Name:  miki
Age  50

Аргументы по умолчанию

Аргумент по умолчанию — это аргумент, который принимает значение по умолчанию, если значение не указано в вызове функции для этого аргумента. Следующий пример дает представление об аргументах по умолчанию, он печатает возраст по умолчанию, если он не был передан —

Live Demo

#!/usr/bin/python

# Function definition is here
def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )

Когда приведенный выше код выполняется, он дает следующий результат —

Name:  miki
Age  50
Name:  miki
Age  35

Аргументы переменной длины

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

Синтаксис для функции с аргументами переменной, не являющейся ключевым словом, следующий:

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

Звездочка (*) ставится перед именем переменной, которая содержит значения всех аргументов переменных неключевых слов. Этот кортеж остается пустым, если во время вызова функции не указаны дополнительные аргументы. Ниже приведен простой пример —

Live Demo

#!/usr/bin/python

# Function definition is here
def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print "Output is: "
   print arg1
   for var in vartuple:
      print var
   return;

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

Когда приведенный выше код выполняется, он дает следующий результат —

Output is:
10
Output is:
70
60
50

Анонимные функции

Эти функции называются анонимными, потому что они не объявляются стандартным способом с помощью ключевого слова def . Вы можете использовать ключевое слово lambda для создания небольших анонимных функций.

  • Лямбда-формы могут принимать любое количество аргументов, но возвращать только одно значение в форме выражения. Они не могут содержать команды или несколько выражений.

  • Анонимная функция не может быть прямым вызовом для печати, потому что лямбда-выражение требует выражения

  • Лямбда-функции имеют свое собственное локальное пространство имен и не могут получить доступ к переменным, отличным от переменных в их списке параметров и переменных в глобальном пространстве имен.

  • Хотя кажется, что лямбда-выражения — это однострочная версия функции, они не эквивалентны встроенным операторам в C или C ++, целью которых является передача выделения стека функций во время вызова по соображениям производительности.

Лямбда-формы могут принимать любое количество аргументов, но возвращать только одно значение в форме выражения. Они не могут содержать команды или несколько выражений.

Анонимная функция не может быть прямым вызовом для печати, потому что лямбда-выражение требует выражения

Лямбда-функции имеют свое собственное локальное пространство имен и не могут получить доступ к переменным, отличным от переменных в их списке параметров и переменных в глобальном пространстве имен.

Хотя кажется, что лямбда-выражения — это однострочная версия функции, они не эквивалентны встроенным операторам в C или C ++, целью которых является передача выделения стека функций во время вызова по соображениям производительности.

Синтаксис

Синтаксис лямбда- функций содержит только один оператор, который выглядит следующим образом:

lambda [arg1 [,arg2,.....argn]]:expression

Ниже приведен пример, показывающий, как работает лямбда- форма функции:

Live Demo

#!/usr/bin/python

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

Когда приведенный выше код выполняется, он дает следующий результат —

Value of total :  30
Value of total :  40

Заявление о возврате

Оператор return [выражение] выходит из функции, необязательно передавая выражение вызывающей стороне. Оператор return без аргументов аналогичен return None.

Все приведенные выше примеры не возвращают никакого значения. Вы можете вернуть значение из функции следующим образом —

Live Demo

#!/usr/bin/python

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print "Inside the function : ", total
   return total;

# Now you can call sum function
total = sum( 10, 20 );
print "Outside the function : ", total 

Когда приведенный выше код выполняется, он дает следующий результат —

Inside the function :  30
Outside the function :  30

Область Переменных

Все переменные в программе могут быть недоступны во всех местах этой программы. Это зависит от того, где вы объявили переменную.

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

  • Глобальные переменные
  • Локальные переменные

Глобальные и локальные переменные

Переменные, которые определены внутри тела функции, имеют локальную область видимости, а переменные, определенные снаружи, имеют глобальную область видимости.

Это означает, что локальные переменные могут быть доступны только внутри функции, в которой они объявлены, в то время как глобальные переменные могут быть доступны по всему телу программы всеми функциями. Когда вы вызываете функцию, переменные, объявленные внутри нее, попадают в область видимости. Ниже приведен простой пример —

Live Demo

#!/usr/bin/python

total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print "Inside the function local total : ", total
   return total;

# Now you can call sum function
sum( 10, 20 );
print "Outside the function global total : ", total 

Когда приведенный выше код выполняется, он дает следующий результат —

Inside the function local total :  30
Outside the function global total :  0

Python — Модули

Модуль позволяет вам логически организовать ваш код Python. Группировка связанного кода в модуль облегчает понимание и использование кода. Модуль — это объект Python с произвольно названными атрибутами, которые вы можете связать и сослаться на них.

Просто модуль — это файл, состоящий из кода Python. Модуль может определять функции, классы и переменные. Модуль также может включать исполняемый код.

пример

Код Python для модуля с именем aname обычно находится в файле с именем aname.py . Вот пример простого модуля, support.py

def print_func( par ):
   print "Hello : ", par
   return

Заявление об импорте

Вы можете использовать любой исходный файл Python в качестве модуля, выполнив инструкцию import в другом исходном файле Python. Импорт имеет следующий синтаксис —

import module1[, module2[,... moduleN]

Когда интерпретатор встречает оператор импорта, он импортирует модуль, если модуль присутствует в пути поиска. Путь поиска — это список каталогов, которые интерпретатор ищет перед импортом модуля. Например, чтобы импортировать модуль support.py, вам нужно поместить следующую команду вверху скрипта:

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

Когда приведенный выше код выполняется, он дает следующий результат —

Hello : Zara

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

Заявление от … импорта

Оператор Python from позволяет импортировать определенные атрибуты из модуля в текущее пространство имен. Импорт from … имеет следующий синтаксис —

from modname import name1[, name2[, ... nameN]]

Например, чтобы импортировать функцию fibonacci из модуля fib, используйте следующий оператор —

from fib import fibonacci

Этот оператор не импортирует весь модуль fib в текущее пространство имен; он просто вводит элемент fibonacci из модуля fib в глобальную таблицу символов импортирующего модуля.

Заявление от … import *

Также возможно импортировать все имена из модуля в текущее пространство имен, используя следующую инструкцию импорта —

from modname import *

Это обеспечивает простой способ импортировать все элементы из модуля в текущее пространство имен; Однако это утверждение следует использовать с осторожностью.

Расположение модулей

Когда вы импортируете модуль, интерпретатор Python ищет модуль в следующих последовательностях:

  • Текущий каталог.

  • Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.

  • Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python /.

Текущий каталог.

Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.

Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python /.

Путь поиска модуля хранится в системном модуле sys как переменная sys.path . Переменная sys.path содержит текущий каталог, PYTHONPATH и зависящее от установки значение по умолчанию.

Переменная PYTHONPATH

PYTHONPATH — это переменная окружения, состоящая из списка каталогов. Синтаксис PYTHONPATH такой же, как и у переменной оболочки PATH.

Вот типичный PYTHONPATH из системы Windows —

set PYTHONPATH = c:\python20\lib;

А вот типичный PYTHONPATH из системы UNIX —

set PYTHONPATH = /usr/local/lib/python

Пространства имен и область видимости

Переменные — это имена (идентификаторы), которые отображаются на объекты. Пространство имен — это словарь имен переменных (ключей) и соответствующих им объектов (значений).

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

Каждая функция имеет свое локальное пространство имен. Методы класса следуют тому же правилу видимости, что и обычные функции.

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

Следовательно, чтобы присвоить значение глобальной переменной внутри функции, сначала необходимо использовать глобальный оператор.

Оператор global VarName сообщает Python, что VarName является глобальной переменной. Python прекращает поиск переменной в локальном пространстве имен.

Например, мы определяем переменную Money в глобальном пространстве имен. Внутри функции Money мы присваиваем Money значение, поэтому Python принимает Money в качестве локальной переменной. Однако перед установкой мы получили доступ к значению локальной переменной Money , поэтому результатом является UnboundLocalError. Раскомментирование глобального утверждения устраняет проблему.

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

Функция dir ()

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

Список содержит имена всех модулей, переменных и функций, которые определены в модуле. Ниже приведен простой пример —

Live Demo

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

Когда приведенный выше код выполняется, он дает следующий результат —

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

Здесь специальная строковая переменная __name__ — это имя модуля, а __file__ — имя файла, из которого был загружен модуль.

Функции глобальных () и локальных () функций

Функции globals () и locals () можно использовать для возврата имен в глобальном и локальном пространствах имен в зависимости от места, откуда они вызываются.

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

Если globals () вызывается из функции, он возвращает все имена, к которым можно получить глобальный доступ из этой функции.

Тип возврата обеих этих функций — словарь. Поэтому имена могут быть извлечены с помощью функции keys ().

Функция reload ()

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

Поэтому, если вы хотите повторно выполнить код верхнего уровня в модуле, вы можете использовать функцию reload () . Функция reload () снова импортирует ранее импортированный модуль. Синтаксис функции reload () такой:

reload(module_name)

Здесь имя_модуля — это имя модуля, который вы хотите перезагрузить, а не строка, содержащая имя модуля. Например, чтобы перезагрузить модуль hello , сделайте следующее:

reload(hello)

Пакеты в Python

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

Рассмотрим файл Pots.py, доступный в телефонном справочнике. Этот файл имеет следующую строку исходного кода —

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

Аналогичным образом, у нас есть еще два файла с разными функциями с тем же именем, что и выше —

  • Файл Phone / Isdn.py с функцией Isdn ()

  • Файл Phone / G3.py, имеющий функцию G3 ()

Файл Phone / Isdn.py с функцией Isdn ()

Файл Phone / G3.py, имеющий функцию G3 ()

Теперь создайте еще один файл __init__.py в телефонном справочнике —

  • Телефон / __ init__.py

Чтобы сделать все ваши функции доступными при импорте Phone, вам нужно поместить явные операторы импорта в __init__.py следующим образом:

from Pots import Pots
from Isdn import Isdn
from G3 import G3

После добавления этих строк в __init__.py у вас есть все эти классы, доступные при импорте пакета Phone.

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

Когда приведенный выше код выполняется, он дает следующий результат —

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

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

Python — Файлы ввода / вывода

В этой главе рассматриваются все основные функции ввода / вывода, доступные в Python. Для получения дополнительной информации, пожалуйста, обратитесь к стандартной документации Python.

Печать на экран

Простейший способ создания вывода — использовать оператор print, в котором вы можете передать ноль или более выражений, разделенных запятыми. Эта функция преобразует передаваемые выражения в строку и записывает результат в стандартный вывод следующим образом:

Live Demo

#!/usr/bin/python

print "Python is really a great language,", "isn't it?"

Это дает следующий результат на вашем стандартном экране —

Python is really a great language, isn't it?

Чтение ввода с клавиатуры

Python предоставляет две встроенные функции для чтения строки текста из стандартного ввода, который по умолчанию идет с клавиатуры. Эти функции —

  • сырой ввод
  • вход

Функция raw_input

Функция raw_input ([prompt]) читает одну строку из стандартного ввода и возвращает ее в виде строки (удаляя завершающий символ новой строки).

#!/usr/bin/python

str = raw_input("Enter your input: ");
print "Received input is : ", str

Это предложит вам ввести любую строку, и она будет отображать ту же строку на экране. Когда я набрал «Hello Python!», Его вывод выглядит так —

Enter your input: Hello Python
Received input is :  Hello Python

Функция ввода

Функция input ([prompt]) эквивалентна raw_input, за исключением того, что она предполагает, что input является допустимым выражением Python, и возвращает вам оцененный результат.

#!/usr/bin/python

str = input("Enter your input: ");
print "Received input is : ", str

Это даст следующий результат для введенного ввода —

Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is :  [10, 20, 30, 40]

Открытие и закрытие файлов

До сих пор вы читали и писали на стандартный ввод и вывод. Теперь мы увидим, как использовать реальные файлы данных.

Python предоставляет основные функции и методы, необходимые для работы с файлами по умолчанию. Вы можете сделать большую часть манипуляций с файлом, используя объект файла .

Открытая функция

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

Синтаксис

file object = open(file_name [, access_mode][, buffering])

Вот детали параметров —

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

  • access_mode — access_mode определяет режим, в котором файл должен быть открыт, то есть чтение, запись, добавление и т. д. Полный список возможных значений приведен ниже в таблице. Это необязательный параметр, и режим доступа к файлу по умолчанию — read (r).

  • буферизация — если значение буферизации установлено в 0, буферизация не выполняется. Если значение буферизации равно 1, буферизация строки выполняется при доступе к файлу. Если вы укажете значение буферизации как целое число больше 1, то действие буферизации будет выполнено с указанным размером буфера. Если отрицательный, размер буфера является системным значением по умолчанию (поведение по умолчанию).

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

access_mode — access_mode определяет режим, в котором файл должен быть открыт, то есть чтение, запись, добавление и т. д. Полный список возможных значений приведен ниже в таблице. Это необязательный параметр, и режим доступа к файлу по умолчанию — read (r).

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

Вот список различных режимов открытия файла —

Sr.No. Режимы и описание
1

р

Открывает файл только для чтения. Указатель файла находится в начале файла. Это режим «по умолчанию».

2

Р.Б.

Открывает файл для чтения только в двоичном формате. Указатель файла находится в начале файла. Это режим «по умолчанию».

3

г +

Открывает файл для чтения и записи. Указатель файла помещается в начале файла.

4

гь +

Открывает файл для чтения и записи в двоичном формате. Указатель файла помещается в начале файла.

5

вес

Открывает файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

6

термометру

Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

7

ш +

Открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

8

термометр +

Открывает файл для записи и чтения в двоичном формате. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

9

Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

10

аб

Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

11

а +

Открывает файл для добавления и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

12

аб +

Открывает файл для добавления и чтения в двоичном формате. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

р

Открывает файл только для чтения. Указатель файла находится в начале файла. Это режим «по умолчанию».

Р.Б.

Открывает файл для чтения только в двоичном формате. Указатель файла находится в начале файла. Это режим «по умолчанию».

г +

Открывает файл для чтения и записи. Указатель файла помещается в начале файла.

гь +

Открывает файл для чтения и записи в двоичном формате. Указатель файла помещается в начале файла.

вес

Открывает файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

термометру

Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

ш +

Открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

термометр +

Открывает файл для записи и чтения в двоичном формате. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

аб

Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

а +

Открывает файл для добавления и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

аб +

Открывает файл для добавления и чтения в двоичном формате. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

Атрибуты объекта файла

Когда файл открыт и у вас есть один объект файла , вы можете получить различную информацию, связанную с этим файлом.

Вот список всех атрибутов, связанных с файловым объектом —

Sr.No. Атрибут и описание
1

file.closed

Возвращает true, если файл закрыт, иначе false.

2

file.mode

Возвращает режим доступа, с которым файл был открыт.

3

имя файла

Возвращает имя файла.

4

file.softspace

Возвращает false, если для печати явно требуется пространство, в противном случае — true.

file.closed

Возвращает true, если файл закрыт, иначе false.

file.mode

Возвращает режим доступа, с которым файл был открыт.

имя файла

Возвращает имя файла.

file.softspace

Возвращает false, если для печати явно требуется пространство, в противном случае — true.

пример

Live Demo

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace

Это дает следующий результат —

Name of the file:  foo.txt
Closed or not :  False
Opening mode :  wb
Softspace flag :  0

Метод close ()

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

Python автоматически закрывает файл, когда ссылочный объект файла переназначается другому файлу. Рекомендуется использовать метод close () для закрытия файла.

Синтаксис

fileObject.close();

пример

Live Demo

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name

# Close opend file
fo.close()

Это дает следующий результат —

Name of the file:  foo.txt

Чтение и запись файлов

Файловый объект предоставляет набор методов доступа, чтобы сделать нашу жизнь проще. Мы увидим, как использовать методы read () и write () для чтения и записи файлов.

Метод write ()

Метод write () записывает любую строку в открытый файл. Важно отметить, что строки Python могут содержать двоичные данные, а не только текст.

Метод write () не добавляет символ новой строки (‘\ n’) в конец строки —

Синтаксис

fileObject.write(string);

Здесь переданный параметр — это содержимое, которое будет записано в открытый файл.

пример

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n");

# Close opend file
fo.close()

Вышеуказанный метод создаст файл foo.txt и запишет заданное содержимое в этот файл, и, наконец, закроет этот файл. Если вы откроете этот файл, он будет иметь следующий контент.

Python is a great language.
Yeah its great!!

Метод read ()

Метод read () читает строку из открытого файла. Важно отметить, что строки Python могут иметь двоичные данные. кроме текстовых данных.

Синтаксис

fileObject.read([count]);

Здесь переданный параметр — это количество байтов, которые нужно прочитать из открытого файла. Этот метод начинает чтение с начала файла и, если счетчик отсутствует, он пытается прочитать как можно больше, возможно, до конца файла.

пример

Давайте возьмем файл foo.txt , который мы создали выше.

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()

Это дает следующий результат —

Read String is :  Python is

Позиции файлов

Метод tell () сообщает текущую позицию в файле; другими словами, следующее чтение или запись будет происходить с таким количеством байтов от начала файла.

Метод seek (offset [, from]) изменяет текущую позицию файла. Аргумент смещения указывает количество байтов для перемещения. Аргумент from указывает ссылочную позицию, откуда байты должны быть перемещены.

Если для from установлено значение 0, это означает использование начала файла в качестве ссылочной позиции, а 1 означает использование текущей позиции в качестве ссылочной позиции, а если оно установлено на 2, то конец файла будет принят в качестве ссылочной позиции. ,

пример

Давайте возьмем файл foo.txt , который мы создали выше.

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str

# Check current position
position = fo.tell();
print "Current file position : ", position

# Reposition pointer at the beginning once again
position = fo.seek(0, 0);
str = fo.read(10);
print "Again read String is : ", str
# Close opend file
fo.close()

Это дает следующий результат —

Read String is :  Python is
Current file position :  10
Again read String is :  Python is

Переименование и удаление файлов

Модуль Python os предоставляет методы, которые помогают вам выполнять операции обработки файлов, такие как переименование и удаление файлов.

Чтобы использовать этот модуль, сначала нужно его импортировать, а затем вызывать любые связанные функции.

Метод переименования ()

Метод rename () принимает два аргумента: текущее имя файла и новое имя файла.

Синтаксис

os.rename(current_file_name, new_file_name)

пример

Ниже приведен пример для переименования существующего файла test1.txt

#!/usr/bin/python
import os

# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

Метод удаления ()

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

Синтаксис

os.remove(file_name)

пример

Ниже приведен пример удаления существующего файла test2.txt

#!/usr/bin/python
import os

# Delete file test2.txt
os.remove("text2.txt")

Каталоги в Python

Все файлы содержатся в разных каталогах, и у Python нет проблем с этим. Модуль os имеет несколько методов, которые помогут вам создавать, удалять и изменять каталоги.

Метод mkdir ()

Вы можете использовать метод mkdir () модуля os для создания каталогов в текущем каталоге. Вы должны предоставить аргумент для этого метода, который содержит имя каталога, который будет создан.

Синтаксис

os.mkdir("newdir")

пример

Ниже приведен пример создания каталога в текущем каталоге:

#!/usr/bin/python
import os

# Create a directory "test"
os.mkdir("test")

Метод chdir ()

Вы можете использовать метод chdir (), чтобы изменить текущий каталог. Метод chdir () принимает аргумент, который является именем каталога, который вы хотите сделать текущим каталогом.

Синтаксис

os.chdir("newdir")

пример

Ниже приведен пример для перехода в каталог / home / newdir —

#!/usr/bin/python
import os

# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

Метод getcwd ()

Метод getcwd () отображает текущий рабочий каталог.

Синтаксис

os.getcwd()

пример

Ниже приведен пример для предоставления текущего каталога —

#!/usr/bin/python
import os

# This would give location of the current directory
os.getcwd()

Метод rmdir ()

Метод rmdir () удаляет каталог, который передается в качестве аргумента в методе.

Перед удалением каталога все содержимое в нем должно быть удалено.

Синтаксис

os.rmdir('dirname')

пример

Ниже приведен пример удаления каталога «/ tmp / test». Требуется дать полное имя каталога, иначе он будет искать этот каталог в текущем каталоге.

#!/usr/bin/python
import os

# This would  remove "/tmp/test"  directory.
os.rmdir( "/tmp/test"  )

Методы, связанные с файлами и каталогами

Существует три важных источника, которые предоставляют широкий спектр служебных методов для обработки и управления файлами и каталогами в операционных системах Windows и Unix. Они заключаются в следующем —

Методы объекта файла. Объект файла предоставляет функции для управления файлами.

Методы объекта ОС : это предоставляет методы для обработки файлов, а также каталогов.

Python — Обработка исключений

Python предоставляет две очень важные функции для обработки любых непредвиденных ошибок в ваших программах на Python и добавления в них возможностей отладки —

Обработка исключений — это будет описано в этом руководстве. Вот список стандартных исключений, доступных в Python: Стандартные исключения .

Утверждения — это будет описано в руководстве по утверждениям в Python .

Список стандартных исключений —

Sr.No. Название и описание исключения
1

исключение

Базовый класс для всех исключений

2

StopIteration

Возникает, когда метод next () итератора не указывает ни на один объект.

3

SystemExit

Вызывается функцией sys.exit ().

4

Стандартная ошибка

Базовый класс для всех встроенных исключений, кроме StopIteration и SystemExit.

5

ArithmeticError

Базовый класс для всех ошибок, возникающих при численном расчете.

6

OverflowError

Возникает, когда расчет превышает максимальный предел для числового типа.

7

FloatingPointError

Возникает, когда вычисление с плавающей запятой завершается неудачно.

8

ZeroDivisionError

Возникает, когда деление или деление на ноль происходит для всех числовых типов.

9

AssertionError

Вызывается в случае сбоя утверждения Assert.

10

AttributeError

Возникает в случае сбоя ссылки на атрибут или присвоения.

11

EOFError

Возникает, когда нет ввода ни от функции raw_input (), ни от input () и достигнут конец файла.

12

ImportError

Возникает при сбое оператора импорта.

13

KeyboardInterrupt

Возникает, когда пользователь прерывает выполнение программы, обычно нажатием Ctrl + c.

14

LookupError

Базовый класс для всех ошибок поиска.

15

IndexError

Возникает, когда индекс не найден в последовательности.

16

KeyError

Возникает, когда указанный ключ не найден в словаре.

17

NameError

Возникает, когда идентификатор не найден в локальном или глобальном пространстве имен.

18

UnboundLocalError

Возникает при попытке доступа к локальной переменной в функции или методе, но ей не присвоено значение.

19

EnvironmentError

Базовый класс для всех исключений, которые происходят вне среды Python.

20

IOError

Возникает при сбое операции ввода / вывода, такой как оператор print или функция open (), при попытке открыть файл, который не существует.

21

IOError

Вызывается для ошибок, связанных с операционной системой.

22

Ошибка синтаксиса

Возникает при возникновении ошибки в синтаксисе Python.

23

IndentationError

Поднимается, если отступ не указан правильно.

24

Системная ошибка

Возникает, когда интерпретатор обнаруживает внутреннюю проблему, но при обнаружении этой ошибки интерпретатор Python не завершается.

25

SystemExit

Возникает при выходе из интерпретатора Python с помощью функции sys.exit (). Если не обрабатывается в коде, интерпретатор завершает работу.

26

TypeError

Вызывается при попытке выполнить операцию или функцию, которая недопустима для указанного типа данных.

27

ValueError

Возникает, когда встроенная функция для типа данных имеет допустимый тип аргументов, но для аргументов указаны недопустимые значения.

28

Ошибка выполнения

Возникает, когда сгенерированная ошибка не попадает ни в одну категорию.

29

NotImplementedError

Возникает, когда абстрактный метод, который должен быть реализован в унаследованном классе, фактически не реализован.

исключение

Базовый класс для всех исключений

StopIteration

Возникает, когда метод next () итератора не указывает ни на один объект.

SystemExit

Вызывается функцией sys.exit ().

Стандартная ошибка

Базовый класс для всех встроенных исключений, кроме StopIteration и SystemExit.

ArithmeticError

Базовый класс для всех ошибок, возникающих при численном расчете.

OverflowError

Возникает, когда расчет превышает максимальный предел для числового типа.

FloatingPointError

Возникает, когда вычисление с плавающей запятой завершается неудачно.

ZeroDivisionError

Возникает, когда деление или деление на ноль происходит для всех числовых типов.

AssertionError

Вызывается в случае сбоя утверждения Assert.

AttributeError

Возникает в случае сбоя ссылки на атрибут или присвоения.

EOFError

Возникает, когда нет ввода ни от функции raw_input (), ни от input () и достигнут конец файла.

ImportError

Возникает при сбое оператора импорта.

KeyboardInterrupt

Возникает, когда пользователь прерывает выполнение программы, обычно нажатием Ctrl + c.

LookupError

Базовый класс для всех ошибок поиска.

IndexError

Возникает, когда индекс не найден в последовательности.

KeyError

Возникает, когда указанный ключ не найден в словаре.

NameError

Возникает, когда идентификатор не найден в локальном или глобальном пространстве имен.

UnboundLocalError

Возникает при попытке доступа к локальной переменной в функции или методе, но ей не присвоено значение.

EnvironmentError

Базовый класс для всех исключений, которые происходят вне среды Python.

IOError

Возникает при сбое операции ввода / вывода, такой как оператор print или функция open (), при попытке открыть файл, который не существует.

IOError

Вызывается для ошибок, связанных с операционной системой.

Ошибка синтаксиса

Возникает при возникновении ошибки в синтаксисе Python.

IndentationError

Поднимается, если отступ не указан правильно.

Системная ошибка

Возникает, когда интерпретатор обнаруживает внутреннюю проблему, но при обнаружении этой ошибки интерпретатор Python не завершается.

SystemExit

Возникает при выходе из интерпретатора Python с помощью функции sys.exit (). Если не обрабатывается в коде, интерпретатор завершает работу.

TypeError

Вызывается при попытке выполнить операцию или функцию, которая недопустима для указанного типа данных.

ValueError

Возникает, когда встроенная функция для типа данных имеет допустимый тип аргументов, но для аргументов указаны недопустимые значения.

Ошибка выполнения

Возникает, когда сгенерированная ошибка не попадает ни в одну категорию.

NotImplementedError

Возникает, когда абстрактный метод, который должен быть реализован в унаследованном классе, фактически не реализован.

Утверждения в Python

Утверждение — это проверка работоспособности, которую вы можете включить или отключить, когда закончите тестирование программы.

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

Утверждения выполняются оператором assert, новейшим ключевым словом Python, представленным в версии 1.5.

Программисты часто помещают утверждения в начале функции для проверки правильности ввода и после вызова функции для проверки правильности вывода.

Утверждение утверждения

Когда он встречает утверждение assert, Python оценивает сопровождающее выражение, которое, как мы надеемся, истинно. Если выражение ложно, Python вызывает исключение AssertionError .

Синтаксис для assert —

assert Expression[, Arguments]

Если утверждение не выполняется, Python использует ArgumentExpression в качестве аргумента для AssertionError. Исключения AssertionError могут быть перехвачены и обработаны, как и любое другое исключение, с помощью оператора try-кроме, но если не обработано, они завершат программу и произведут трассировку.

пример

Вот функция, которая преобразует температуру из градусов Кельвина в градусы Фаренгейта. Поскольку ноль градусов Кельвина настолько холоден, насколько это возможно, функция выручает, если она видит отрицательную температуру —

Live Demo

#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
   assert (Temperature >= 0),"Colder than absolute zero!"
   return ((Temperature-273)*1.8)+32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

Когда приведенный выше код выполняется, он дает следующий результат —

32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!

Что такое исключение?

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

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

Обработка исключения

Если у вас есть подозрительный код, который может вызвать исключение, вы можете защитить свою программу, поместив подозрительный код в блок try : . После блока try: включите оператор exc:, а затем блок кода, который обрабатывает проблему максимально элегантно.

Синтаксис

Вот простой синтаксис try …. кроме … else блоков —

try:
   You do your operations here;
   ......................
except ExceptionI :
   If there is ExceptionI, then execute this block.
except ExceptionII :
   If there is ExceptionII, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

Вот несколько важных моментов о вышеупомянутом синтаксисе:

  • У одного оператора try может быть несколько операторов, кроме. Это полезно, когда блок try содержит операторы, которые могут выдавать различные типы исключений.

  • Вы также можете предоставить универсальный исключающий пункт, который обрабатывает любое исключение.

  • После предложения (й) исключений вы можете включить предложение else. Код в блоке else выполняется, если код в блоке try: не вызывает исключение.

  • Блок else — это хорошее место для кода, который не нуждается в защите try: block.

У одного оператора try может быть несколько операторов, кроме. Это полезно, когда блок try содержит операторы, которые могут выдавать различные типы исключений.

Вы также можете предоставить универсальный исключающий пункт, который обрабатывает любое исключение.

После предложения (й) исключений вы можете включить предложение else. Код в блоке else выполняется, если код в блоке try: не вызывает исключение.

Блок else — это хорошее место для кода, который не нуждается в защите try: block.

пример

Этот пример открывает файл, записывает содержимое в файл, и изящно выходит, потому что нет никаких проблем —

Live Demo

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"
   fh.close()

Это дает следующий результат —

Written content in the file successfully

пример

В этом примере пытается открыть файл, в котором у вас нет разрешения на запись, поэтому возникает исключение —

Live Demo

#!/usr/bin/python

try:
   fh = open("testfile", "r")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"

Это дает следующий результат —

Error: can't find file or read data

Исключая оговорку без исключений

Вы также можете использовать оператор исключения без исключений, определенных следующим образом:

try:
   You do your operations here;
   ......................
except:
   If there is any exception, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

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

Исключая оговорку с несколькими исключениями

Вы также можете использовать тот же оператор кроме для обработки нескольких исключений следующим образом:

try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

Попробуй окончательно

Вы можете использовать блок finally: вместе с блоком try: Блок finally — это место для размещения любого кода, который должен выполняться независимо от того, вызвал ли блок try исключение или нет. Синтаксис оператора try-finally таков:

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

Вы не можете использовать предложение else вместе с предложением finally.

пример

Live Demo

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
finally:
   print "Error: can\'t find file or read data"

Если у вас нет разрешения на открытие файла в режиме записи, это приведет к следующему результату:

Error: can't find file or read data

Тот же пример можно написать более четко следующим образом:

Live Demo

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   try:
      fh.write("This is my test file for exception handling!!")
   finally:
      print "Going to close the file"
      fh.close()
except IOError:
   print "Error: can\'t find file or read data"

Когда в блоке try создается исключение, выполнение немедленно передается блоку finally . После того, как все операторы в блоке finally выполнены, исключение вызывается снова и обрабатывается в операторах исключения, если оно присутствует на следующем более высоком уровне оператора try- exc.

Аргумент Исключения

Исключение может иметь аргумент , который является значением, дающим дополнительную информацию о проблеме. Содержание аргумента варьируется в зависимости от исключения. Вы фиксируете аргумент исключения, предоставляя переменную в предложении exc следующим образом:

try:
   You do your operations here;
   ......................
except ExceptionType, Argument :
   You can print value of Argument here...

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

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

пример

Ниже приведен пример для одного исключения —

Live Demo

#!/usr/bin/python

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError, Argument:
      print "The argument does not contain numbers\n", Argument

# Call above function here.
temp_convert("xyz");

Это дает следующий результат —

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

Возбуждение исключений

Вы можете вызывать исключения несколькими способами, используя оператор поднятия. Общий синтаксис для оператора повышения следующий.

Синтаксис

raise [Exception [, args [, traceback]]]

Здесь Exception — это тип исключения (например, NameError), а аргумент — это значение для аргумента исключения. Аргумент необязательный; если не указан, аргумент исключения — None.

Последний аргумент, traceback, также является необязательным (и редко используется на практике) и, если присутствует, является объектом трассировки, используемым для исключения.

пример

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

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

Примечание. Чтобы перехватить исключение, предложение «кроме» должно ссылаться на то же исключение, выброшенное либо объектом класса, либо простой строкой. Например, чтобы зафиксировать вышеупомянутое исключение, мы должны написать предложение исключение следующим образом:

try:
   Business Logic here...
except "Invalid level!":
   Exception handling here...
else:
   Rest of the code here...

Определяемые пользователем исключения

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

Вот пример, связанный с RuntimeError . Здесь создается класс, который наследуется от RuntimeError . Это полезно, когда вам нужно отобразить более конкретную информацию при обнаружении исключения.

В блоке try определенное пользователем исключение возникает и перехватывается в блоке exc. Переменная e используется для создания экземпляра класса Networkerror .

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

Поэтому, как только вы определили класс выше, вы можете вызвать исключение следующим образом:

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print e.args

Python — объектно-ориентированный

Python был объектно-ориентированным языком с момента его появления. Из-за этого создавать и использовать классы и объекты совершенно просто. Эта глава поможет вам стать экспертом в использовании поддержки объектно-ориентированного программирования в Python.

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

Тем не менее, вот небольшое введение объектно-ориентированного программирования (ООП), которое поможет вам быстро —

Обзор терминологии ООП

  • Класс — определенный пользователем прототип для объекта, который определяет набор атрибутов, которые характеризуют любой объект класса. Атрибутами являются члены данных (переменные класса и переменные экземпляра) и методы, доступ к которым осуществляется через точечную запись.

  • Переменная класса — переменная, которая используется всеми экземплярами класса. Переменные класса определены внутри класса, но вне любого из методов класса. Переменные класса используются не так часто, как переменные экземпляра.

  • Член данных — переменная класса или переменная экземпляра, которая содержит данные, связанные с классом и его объектами.

  • Перегрузка функций — назначение более чем одного поведения определенной функции. Выполняемая операция варьируется в зависимости от типов объектов или аргументов.

  • Переменная экземпляра — переменная, которая определена внутри метода и принадлежит только текущему экземпляру класса.

  • Наследование — передача характеристик класса другим классам, которые являются его производными.

  • Экземпляр — индивидуальный объект определенного класса. Например, объект obj, принадлежащий классу Circle, является экземпляром класса Circle.

  • Instantiation — создание экземпляра класса.

  • Метод — особый вид функции, который определен в определении класса.

  • Объект — уникальный экземпляр структуры данных, который определяется его классом. Объект включает в себя как члены данных (переменные класса и переменные экземпляра), так и методы.

  • Перегрузка оператора — назначение более чем одной функции определенному оператору.

Класс — определенный пользователем прототип для объекта, который определяет набор атрибутов, которые характеризуют любой объект класса. Атрибутами являются члены данных (переменные класса и переменные экземпляра) и методы, доступ к которым осуществляется через точечную запись.

Переменная класса — переменная, которая используется всеми экземплярами класса. Переменные класса определены внутри класса, но вне любого из методов класса. Переменные класса используются не так часто, как переменные экземпляра.

Член данных — переменная класса или переменная экземпляра, которая содержит данные, связанные с классом и его объектами.

Перегрузка функций — назначение более чем одного поведения определенной функции. Выполняемая операция варьируется в зависимости от типов объектов или аргументов.

Переменная экземпляра — переменная, которая определена внутри метода и принадлежит только текущему экземпляру класса.

Наследование — передача характеристик класса другим классам, которые являются его производными.

Экземпляр — индивидуальный объект определенного класса. Например, объект obj, принадлежащий классу Circle, является экземпляром класса Circle.

Instantiation — создание экземпляра класса.

Метод — особый вид функции, который определен в определении класса.

Объект — уникальный экземпляр структуры данных, который определяется его классом. Объект включает в себя как члены данных (переменные класса и переменные экземпляра), так и методы.

Перегрузка оператора — назначение более чем одной функции определенному оператору.

Создание классов

Оператор класса создает новое определение класса. Имя класса следует сразу за ключевым словом class, за которым следует двоеточие:

class ClassName:
   'Optional class documentation string'
   class_suite
  • Класс имеет строку документации, к которой можно получить доступ через ClassName .__ doc__ .

  • Class_suite состоит из всех операторов компонентов, определяющих членов класса, атрибуты данных и функции.

Класс имеет строку документации, к которой можно получить доступ через ClassName .__ doc__ .

Class_suite состоит из всех операторов компонентов, определяющих членов класса, атрибуты данных и функции.

пример

Ниже приведен пример простого класса Python —

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
  • Переменная empCount является переменной класса, значение которой является общим для всех экземпляров этого класса. Доступ к нему можно получить как Employee.empCount внутри класса или за его пределами.

  • Первый метод __init __ () — это специальный метод, который называется конструктором класса или методом инициализации, который Python вызывает при создании нового экземпляра этого класса.

  • Вы объявляете другие методы класса, как обычные функции, за исключением того, что первый аргумент каждого метода — это self . Python добавляет аргумент self в список для вас; вам не нужно включать его при вызове методов.

Переменная empCount является переменной класса, значение которой является общим для всех экземпляров этого класса. Доступ к нему можно получить как Employee.empCount внутри класса или за его пределами.

Первый метод __init __ () — это специальный метод, который называется конструктором класса или методом инициализации, который Python вызывает при создании нового экземпляра этого класса.

Вы объявляете другие методы класса, как обычные функции, за исключением того, что первый аргумент каждого метода — это self . Python добавляет аргумент self в список для вас; вам не нужно включать его при вызове методов.

Создание объектов экземпляра

Чтобы создать экземпляры класса, вы вызываете класс, используя имя класса, и передаете любые аргументы, которые принимает его метод __init__ .

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)

Доступ к атрибутам

Вы получаете доступ к атрибутам объекта, используя оператор точки с объектом. Переменная класса будет доступна с использованием имени класса следующим образом:

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

Теперь, объединяя все концепции —

Live Demo

#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

Когда приведенный выше код выполняется, он дает следующий результат —

Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2

Вы можете добавлять, удалять или изменять атрибуты классов и объектов в любое время —

emp1.age = 7  # Add an 'age' attribute.
emp1.age = 8  # Modify 'age' attribute.
del emp1.age  # Delete 'age' attribute.

Вместо использования обычных операторов для доступа к атрибутам, вы можете использовать следующие функции:

  • Getattr (obj, name [, default]) — для доступа к атрибуту объекта.

  • Hasattr (obj, name) — проверить, существует атрибут или нет.

  • Setattr (obj, name, value) — установить атрибут. Если атрибут не существует, он будет создан.

  • Delattr (obj, name) — удалить атрибут.

Getattr (obj, name [, default]) — для доступа к атрибуту объекта.

Hasattr (obj, name) — проверить, существует атрибут или нет.

Setattr (obj, name, value) — установить атрибут. Если атрибут не существует, он будет создан.

Delattr (obj, name) — удалить атрибут.

hasattr(emp1, 'age')    # Returns true if 'age' attribute exists
getattr(emp1, 'age')    # Returns value of 'age' attribute
setattr(emp1, 'age', 8) # Set attribute 'age' at 8
delattr(empl, 'age')    # Delete attribute 'age'

Встроенные атрибуты класса

Каждый класс Python поддерживает следующие встроенные атрибуты, и к ним можно получить доступ, используя оператор точки, как и любой другой атрибут —

  • __dict__ — словарь, содержащий пространство имен класса.

  • __doc__ — Строка документации класса или нет, если она не определена.

  • __name__ — Имя класса.

  • __module__ — Имя модуля, в котором определяется класс. Этот атрибут «__main__» в интерактивном режиме.

  • __bases__ — возможно пустой кортеж, содержащий базовые классы, в порядке их появления в списке базовых классов.

__dict__ — словарь, содержащий пространство имен класса.

__doc__ — Строка документации класса или нет, если она не определена.

__name__ — Имя класса.

__module__ — Имя модуля, в котором определяется класс. Этот атрибут «__main__» в интерактивном режиме.

__bases__ — возможно пустой кортеж, содержащий базовые классы, в порядке их появления в списке базовых классов.

Для приведенного выше класса давайте попробуем получить доступ ко всем этим атрибутам —

Live Demo

#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

print "Employee.__doc__:", Employee.__doc__
print "Employee.__name__:", Employee.__name__
print "Employee.__module__:", Employee.__module__
print "Employee.__bases__:", Employee.__bases__
print "Employee.__dict__:", Employee.__dict__

Когда приведенный выше код выполняется, он дает следующий результат —

Employee.__doc__: Common base class for all employees
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount':
<function displayCount at 0xb7c84994>, 'empCount': 2, 
'displayEmployee': <function displayEmployee at 0xb7c8441c>, 
'__doc__': 'Common base class for all employees', 
'__init__': <function __init__ at 0xb7c846bc>}

Уничтожение объектов (Сборка мусора)

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

Сборщик мусора в Python запускается во время выполнения программы и запускается, когда счетчик ссылок на объект достигает нуля. Количество ссылок объекта изменяется по мере изменения количества псевдонимов, которые на него указывают.

Счетчик ссылок на объект увеличивается, когда ему присваивается новое имя или он помещается в контейнер (список, кортеж или словарь). Счетчик ссылок объекта уменьшается, когда он удаляется с помощью del , его ссылка переназначается или его ссылка выходит за пределы области видимости. Когда счетчик ссылок объекта достигает нуля, Python собирает его автоматически.

a = 40      # Create object <40>
b = a       # Increase ref. count  of <40> 
c = [b]     # Increase ref. count  of <40> 

del a       # Decrease ref. count  of <40>
b = 100     # Decrease ref. count  of <40> 
c[0] = -1   # Decrease ref. count  of <40> 

Обычно вы не замечаете, когда сборщик мусора уничтожает потерянный экземпляр и освобождает его пространство. Но класс может реализовать специальный метод __del __ () , называемый деструктором, который вызывается, когда экземпляр собирается быть уничтоженным. Этот метод может использоваться для очистки любых ресурсов памяти, используемых экземпляром.

пример

Этот деструктор __del __ () печатает имя класса экземпляра, который должен быть уничтожен —

Live Demo

#!/usr/bin/python

class Point:
   def __init__( self, x=0, y=0):
      self.x = x
      self.y = y
   def __del__(self):
      class_name = self.__class__.__name__
      print class_name, "destroyed"

pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts
del pt1
del pt2
del pt3

Когда приведенный выше код выполняется, он дает следующий результат —

3083401324 3083401324 3083401324
Point destroyed

Примечание. В идеале вы должны определять свои классы в отдельном файле, а затем импортировать их в основной файл программы с помощью оператора import .

Наследование классов

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

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

Синтаксис

Производные классы объявляются так же, как их родительский класс; однако список базовых классов для наследования дается после имени класса —

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

пример

Live Demo

#!/usr/bin/python

class Parent:        # define parent class
   parentAttr = 100
   def __init__(self):
      print "Calling parent constructor"

   def parentMethod(self):
      print 'Calling parent method'

   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print "Parent attribute :", Parent.parentAttr

class Child(Parent): # define child class
   def __init__(self):
      print "Calling child constructor"

   def childMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.childMethod()      # child calls its method
c.parentMethod()     # calls parent's method
c.setAttr(200)       # again call parent's method
c.getAttr()          # again call parent's method

Когда приведенный выше код выполняется, он дает следующий результат —

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

Аналогичным образом вы можете управлять классом из нескольких родительских классов следующим образом:

class A:        # define your class A
.....

class B:         # define your class B
.....

class C(A, B):   # subclass of A and B
.....

Вы можете использовать функции issubclass () или isinstance (), чтобы проверить отношения двух классов и экземпляров.

  • Булева функция issubclass (sub, sup) возвращает true, если данный подкласс sub действительно является подклассом суперкласса sup .

  • Булева функция isinstance (obj, Class) возвращает true, если obj является экземпляром класса Class или экземпляром подкласса Class

Булева функция issubclass (sub, sup) возвращает true, если данный подкласс sub действительно является подклассом суперкласса sup .

Булева функция isinstance (obj, Class) возвращает true, если obj является экземпляром класса Class или экземпляром подкласса Class

Переопределяющие методы

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

пример

Live Demo

#!/usr/bin/python

class Parent:        # define parent class
   def myMethod(self):
      print 'Calling parent method'

class Child(Parent): # define child class
   def myMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.myMethod()         # child calls overridden method

Когда приведенный выше код выполняется, он дает следующий результат —

Calling child method

Базовые методы перегрузки

В следующей таблице перечислены некоторые общие функции, которые вы можете переопределить в своих собственных классах.

Sr.No. Метод, описание и пример вызова
1

__init__ (self [, args …])

Конструктор (с любыми необязательными аргументами)

Пример вызова: obj = className (args)

2

__del __ (самостоятельно)

Деструктор, удаляет объект

Образец звонка: del obj

3

__repr __ (самостоятельно)

Оцениваемое строковое представление

Пример вызова: repr (obj)

4

__str __ (самостоятельно)

Печатное представление строки

Пример вызова: str (obj)

5

__cmp__ (self, x)

Сравнение объектов

Пример вызова: cmp (obj, x)

__init__ (self [, args …])

Конструктор (с любыми необязательными аргументами)

Пример вызова: obj = className (args)

__del __ (самостоятельно)

Деструктор, удаляет объект

Образец звонка: del obj

__repr __ (самостоятельно)

Оцениваемое строковое представление

Пример вызова: repr (obj)

__str __ (самостоятельно)

Печатное представление строки

Пример вызова: str (obj)

__cmp__ (self, x)

Сравнение объектов

Пример вызова: cmp (obj, x)

Операторы перегрузки

Предположим, что вы создали класс Vector для представления двумерных векторов. Что произойдет, когда вы добавите оператор «плюс»? Скорее всего, Python будет кричать на вас.

Однако вы можете определить метод __add__ в вашем классе для выполнения сложения векторов, и тогда оператор плюс будет вести себя так, как ожидалось:

пример

Live Demo

#!/usr/bin/python

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b

   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2

Когда приведенный выше код выполняется, он дает следующий результат —

Vector(7,8)

Скрытие данных

Атрибуты объекта могут или не могут быть видны вне определения класса. Вам необходимо присвоить имена атрибутам с двойным префиксом подчеркивания, и тогда эти атрибуты не будут напрямую видны посторонним.

пример

Live Demo

#!/usr/bin/python

class JustCounter:
   __secretCount = 0
  
   def count(self):
      self.__secretCount += 1
      print self.__secretCount

counter = JustCounter()
counter.count()
counter.count()
print counter.__secretCount

Когда приведенный выше код выполняется, он дает следующий результат —

1
2
Traceback (most recent call last):
   File "test.py", line 12, in <module>
      print counter.__secretCount
AttributeError: JustCounter instance has no attribute '__secretCount'

Python защищает этих членов, внутренне изменяя имя, чтобы включить имя класса. Вы можете получить доступ к таким атрибутам как object._className__attrName . Если вы заменили свою последнюю строку следующим образом, то она работает для вас —

.........................
print counter._JustCounter__secretCount

Когда приведенный выше код выполняется, он дает следующий результат —

1
2
2

Python — Регулярные выражения

Регулярное выражение — это специальная последовательность символов, которая помогает вам сопоставлять или находить другие строки или наборы строк, используя специальный синтаксис, содержащийся в шаблоне. Регулярные выражения широко используются в мире UNIX.

Модуль re обеспечивает полную поддержку Perl-подобных регулярных выражений в Python. Модуль re вызывает исключение re.error, если при компиляции или использовании регулярного выражения возникает ошибка.

Мы рассмотрим две важные функции, которые будут использоваться для обработки регулярных выражений. Но сначала немного: есть различные символы, которые имеют особое значение, когда они используются в регулярном выражении. Чтобы избежать путаницы при работе с регулярными выражениями, мы бы использовали Raw Strings как r’expression .

Функция матча

Эта функция пытается сопоставить шаблон RE со строкой с необязательными флагами .

Вот синтаксис для этой функции —

re.match(pattern, string, flags=0)

Вот описание параметров —

Sr.No. Параметр и описание
1

шаблон

Это регулярное выражение для сопоставления.

2

строка

Это строка, в которой будет производиться поиск в соответствии с шаблоном в начале строки.

3

флаги

Вы можете указать разные флаги используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

шаблон

Это регулярное выражение для сопоставления.

строка

Это строка, в которой будет производиться поиск в соответствии с шаблоном в начале строки.

флаги

Вы можете указать разные флаги используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

Функция re.match возвращает объект соответствия в случае успеха, None в случае ошибки. Мы используем функцию group (num) или groups () объекта match, чтобы получить соответствующее выражение.

Sr.No. Метод и описание объекта соответствия
1

группа (Num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

группа (Num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

пример

Live Demo

#!/usr/bin/python
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print "matchObj.group() : ", matchObj.group()
   print "matchObj.group(1) : ", matchObj.group(1)
   print "matchObj.group(2) : ", matchObj.group(2)
else:
   print "No match!!"

Когда приведенный выше код выполняется, он дает следующий результат —

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

Функция поиска

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

Вот синтаксис для этой функции —

re.search(pattern, string, flags=0)

Вот описание параметров —

Sr.No. Параметр и описание
1

шаблон

Это регулярное выражение для сопоставления.

2

строка

Это строка, в которой будет производиться поиск в соответствии с шаблоном в любом месте строки.

3

флаги

Вы можете указать разные флаги используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

шаблон

Это регулярное выражение для сопоставления.

строка

Это строка, в которой будет производиться поиск в соответствии с шаблоном в любом месте строки.

флаги

Вы можете указать разные флаги используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

Функция re.search возвращает совпадающий объект в случае успеха, но не в случае неудачи. Мы используем функцию group (num) или groups () объекта match, чтобы получить соответствующее выражение.

Sr.No. Методы соответствия объектов и описание
1

группа (Num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

группа (Num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

пример

Live Demo

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print "searchObj.group() : ", searchObj.group()
   print "searchObj.group(1) : ", searchObj.group(1)
   print "searchObj.group(2) : ", searchObj.group(2)
else:
   print "Nothing found!!"

Когда приведенный выше код выполняется, он дает следующий результат —

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

Сопоставление с поиском

Python предлагает две различные примитивные операции, основанные на регулярных выражениях: проверка на совпадение только в начале строки, а поиск проверяет совпадение в любом месте строки (это то, что Perl делает по умолчанию).

пример

Live Demo

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print "search --> searchObj.group() : ", searchObj.group()
else:
   print "Nothing found!!"

Когда приведенный выше код выполняется, он дает следующий результат —

No match!!
search --> matchObj.group() :  dogs

Поиск и замена

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

Синтаксис

re.sub(pattern, repl, string, max=0)

Этот метод заменяет все вхождения шаблона RE в строке на repl , заменяя все вхождения, если не указано максимальное значение . Этот метод возвращает измененную строку.

пример

Live Demo

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print "Phone Num : ", num

Когда приведенный выше код выполняется, он дает следующий результат —

Phone Num :  2004-959-559
Phone Num :  2004959559

Модификаторы регулярных выражений: флаги опций

Литералы регулярных выражений могут включать необязательный модификатор для управления различными аспектами сопоставления. Модификаторы указываются в качестве необязательного флага. Вы можете предоставить несколько модификаторов, используя исключающее ИЛИ (|), как показано ранее, и может быть представлено одним из них —

Sr.No. Модификатор и описание
1

re.I

Выполняет регистронезависимое сопоставление.

2

re.L

Интерпретирует слова в соответствии с текущей локалью. Эта интерпретация влияет на буквенную группу (\ w и \ W), а также на поведение границ слов (\ b и \ B).

3

re.M

Делает $ совпадает с концом строки (не только с концом строки) и заставляет ^ соответствовать началу любой строки (не только с началом строки).

4

re.S

Делает точку (точку) совпадением с любым символом, включая символ новой строки.

5

re.U

Интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение \ w, \ W, \ b, \ B.

6

re.X

Разрешает «симпатичный» синтаксис регулярного выражения. Он игнорирует пробелы (за исключением внутри set [] или когда экранируется обратной косой чертой) и обрабатывает неэкранированный # как маркер комментария.

re.I

Выполняет регистронезависимое сопоставление.

re.L

Интерпретирует слова в соответствии с текущей локалью. Эта интерпретация влияет на буквенную группу (\ w и \ W), а также на поведение границ слов (\ b и \ B).

re.M

Делает $ совпадает с концом строки (не только с концом строки) и заставляет ^ соответствовать началу любой строки (не только с началом строки).

re.S

Делает точку (точку) совпадением с любым символом, включая символ новой строки.

re.U

Интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение \ w, \ W, \ b, \ B.

re.X

Разрешает «симпатичный» синтаксис регулярного выражения. Он игнорирует пробелы (за исключением внутри set [] или когда экранируется обратной косой чертой) и обрабатывает неэкранированный # как маркер комментария.

Шаблоны регулярных выражений

За исключением управляющих символов, (+?. * ^ $ () [] {} | \) , Все символы совпадают. Вы можете избежать управляющего символа, поставив перед ним обратную косую черту.

В следующей таблице приведен синтаксис регулярного выражения, который доступен в Python —

Sr.No. Шаблон и описание
1

^

Соответствует началу строки.

2

$

Соответствует концу строки.

3

,

Соответствует любому отдельному символу, кроме новой строки. Использование опции m позволяет ему соответствовать новой строке.

4

[…]

Соответствует любому отдельному символу в скобках.

5

[^ …]

Соответствует любому отдельному символу не в скобках

6

ре *

Соответствует 0 или более вхождений предыдущего выражения.

7

ре +

Соответствует 1 или более вхождению предыдущего выражения.

8

повторно?

Соответствует 0 или 1 вхождению предыдущего выражения.

9

re {n}

Совпадает ровно с числом вхождений предыдущего выражения.

10

re {n,}

Соответствует n или более вхождений предыдущего выражения.

11

re {n, m}

Соответствует не менее n и не более m вхождений предшествующего выражения.

12

| б

Соответствует либо a, либо b.

13

(ре)

Группирует регулярные выражения и запоминает сопоставленный текст.

14

(? IMX)

Временно переключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.

15

(? -imx)

Временно отключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.

16

(?: re)

Группирует регулярные выражения без запоминания сопоставленного текста.

17

(? imx: re)

Временно переключает параметры i, m или x в круглых скобках.

18

(? -imx: re)

Временно отключает параметры i, m или x в скобках.

19

(? # …)

Комментарий.

20

(? = re)

Определяет положение с помощью шаблона. Не имеет диапазона.

21

(?! re)

Определяет положение, используя отрицание шаблона. Не имеет диапазона.

22

(?> re)

Соответствует независимому образцу без возврата.

23

\ ш

Соответствует символам слова.

24

\ W

Соответствует несловесным персонажам.

25

\ s

Соответствует пробелу. Эквивалентно [\ t \ n \ r \ f].

26

\ S

Соответствует непробельному пространству.

27

\ d

Соответствует цифрам. Эквивалентно [0-9].

28

\ D

Соответствует нецифровым значениям.

29

\ A

Соответствует началу строки.

30

\ Z

Соответствует концу строки. Если новая строка существует, она совпадает непосредственно перед новой строкой.

31

\ г

Соответствует концу строки.

32

Точки совпадений, где последний матч закончился.

33

\ б

Соответствует границам слов, когда они выходят за скобки. Соответствует Backspace (0x08) внутри скобок.

34

\ B

Соответствует безсловным границам.

35

\ n, \ t и т. д.

Сопоставляет переводы строк, возврат каретки, вкладки и т. Д.

36

\ 1 … \ 9

Соответствует n-му сгруппированному подвыражению.

37

\ 10

Соответствует n-му сгруппированному подвыражению, если оно уже найдено. В противном случае относится к восьмеричному представлению кода символа.

^

Соответствует началу строки.

$

Соответствует концу строки.

,

Соответствует любому отдельному символу, кроме новой строки. Использование опции m позволяет ему соответствовать новой строке.

[…]

Соответствует любому отдельному символу в скобках.

[^ …]

Соответствует любому отдельному символу не в скобках

ре *

Соответствует 0 или более вхождений предыдущего выражения.

ре +

Соответствует 1 или более вхождению предыдущего выражения.

повторно?

Соответствует 0 или 1 вхождению предыдущего выражения.

re {n}

Совпадает ровно с числом вхождений предыдущего выражения.

re {n,}

Соответствует n или более вхождений предыдущего выражения.

re {n, m}

Соответствует не менее n и не более m вхождений предшествующего выражения.

| б

Соответствует либо a, либо b.

(ре)

Группирует регулярные выражения и запоминает сопоставленный текст.

(? IMX)

Временно переключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.

(? -imx)

Временно отключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.

(?: re)

Группирует регулярные выражения без запоминания сопоставленного текста.

(? imx: re)

Временно переключает параметры i, m или x в круглых скобках.

(? -imx: re)

Временно отключает параметры i, m или x в скобках.

(? # …)

Комментарий.

(? = re)

Определяет положение с помощью шаблона. Не имеет диапазона.

(?! re)

Определяет положение, используя отрицание шаблона. Не имеет диапазона.

(?> re)

Соответствует независимому образцу без возврата.

\ ш

Соответствует символам слова.

\ W

Соответствует несловесным персонажам.

\ s

Соответствует пробелу. Эквивалентно [\ t \ n \ r \ f].

\ S

Соответствует непробельному пространству.

\ d

Соответствует цифрам. Эквивалентно [0-9].

\ D

Соответствует нецифровым значениям.

\ A

Соответствует началу строки.

\ Z

Соответствует концу строки. Если новая строка существует, она совпадает непосредственно перед новой строкой.

\ г

Соответствует концу строки.

Точки совпадений, где последний матч закончился.

\ б

Соответствует границам слов, когда они выходят за скобки. Соответствует Backspace (0x08) внутри скобок.

\ B

Соответствует безсловным границам.

\ n, \ t и т. д.

Сопоставляет переводы строк, возврат каретки, вкладки и т. Д.

\ 1 … \ 9

Соответствует n-му сгруппированному подвыражению.

\ 10

Соответствует n-му сгруппированному подвыражению, если оно уже найдено. В противном случае относится к восьмеричному представлению кода символа.

Примеры регулярных выражений

Буквенные символы

Sr.No. Пример и описание
1

питон

Матч «питон».

питон

Матч «питон».

Классы персонажей

Sr.No. Пример и описание
1

[Рр] ython

Совпадение «Питон» или «Питон»

2

руб [вы]

Совпадение «рубин» или «рубин»

3

[AEIOU]

Соответствует любой строчной гласной

4

[0-9]

Сопоставить любую цифру; такой же как [0123456789]

5

[AZ]

Совпадение с любой строчной буквой ASCII

6

[AZ]

Совпадение с любой прописной буквой ASCII

7

[A-Za-Z0-9]

Подходим любой из вышеперечисленных

8

[^ AEIOU]

Совпадение с чем-либо, кроме строчной гласной

9

[^ 0-9]

Совпадение с чем угодно, кроме цифры

[Рр] ython

Совпадение «Питон» или «Питон»

руб [вы]

Совпадение «рубин» или «рубин»

[AEIOU]

Соответствует любой строчной гласной

[0-9]

Сопоставить любую цифру; такой же как [0123456789]

[AZ]

Совпадение с любой строчной буквой ASCII

[AZ]

Совпадение с любой прописной буквой ASCII

[A-Za-Z0-9]

Подходим любой из вышеперечисленных

[^ AEIOU]

Совпадение с чем-либо, кроме строчной гласной

[^ 0-9]

Совпадение с чем угодно, кроме цифры

Классы специальных символов

Sr.No. Пример и описание
1

,

Подберите любой символ, кроме новой строки

2

\ d

Совпадение с цифрой: [0-9]

3

\ D

Совпадение с нецифровой цифрой: [^ 0-9]

4

\ s

Совпадение с пробелом: [\ t \ r \ n \ f]

5

\ S

Соответствие непробельному пространству: [^ \ t \ r \ n \ f]

6

\ ш

Совпадение с одним словом: [A-Za-z0-9_]

7

\ W

Соответствует несловесному символу: [^ A-Za-z0-9_]

,

Подберите любой символ, кроме новой строки

\ d

Совпадение с цифрой: [0-9]

\ D

Совпадение с нецифровой цифрой: [^ 0-9]

\ s

Совпадение с пробелом: [\ t \ r \ n \ f]

\ S

Соответствие непробельному пространству: [^ \ t \ r \ n \ f]

\ ш

Совпадение с одним словом: [A-Za-z0-9_]

\ W

Соответствует несловесному символу: [^ A-Za-z0-9_]

Случаи повторения

Sr.No. Пример и описание
1

Рубин?

Совпадение «руб» или «рубин»: у необязательно

2

Рубин*

Совпадение «руб» плюс 0 или более лет

3

рубин +

Совпадение «руб» плюс 1 или более лет

4

\ д {3}

Совпадение ровно 3 цифры

5

\ д {3}

Совпадение 3 или более цифр

6

\ д {3,5}

Совпадение 3, 4 или 5 цифр

Рубин?

Совпадение «руб» или «рубин»: у необязательно

Рубин*

Совпадение «руб» плюс 0 или более лет

рубин +

Совпадение «руб» плюс 1 или более лет

\ д {3}

Совпадение ровно 3 цифры

\ д {3}

Совпадение 3 или более цифр

\ д {3,5}

Совпадение 3, 4 или 5 цифр

Нежелательное повторение

Это соответствует наименьшему количеству повторений —

Sr.No. Пример и описание
1

<. *>

Жадное повторение: соответствует «<python> perl>»

2

<. *?>

Nongreedy: соответствует «<python>» в «<python> perl>»

<. *>

Жадное повторение: соответствует «<python> perl>»

<. *?>

Nongreedy: соответствует «<python>» в «<python> perl>»

Группировка с круглыми скобками

Sr.No. Пример и описание
1

\ D \ D +

Нет группы: + повторяется \ d

2

(\ D \ d) +

Сгруппировано: + повторяет \ D \ d пару

3

([Pp] ython (,)?) +

Совпадение «Питон», «Питон, питон, питон» и т. Д.

\ D \ D +

Нет группы: + повторяется \ d

(\ D \ d) +

Сгруппировано: + повторяет \ D \ d пару

([Pp] ython (,)?) +

Совпадение «Питон», «Питон, питон, питон» и т. Д.

Обратные

Это снова соответствует ранее подобранной группе —

Sr.No. Пример и описание
1

([Рр]) ython & \ 1ails

Сопоставить питона и ведра или Python & ведра

2

([ ‘ «]) [^ \ 1] * \ 1

Строка в одинарных или двойных кавычках. \ 1 соответствует любому совпадению 1-й группы. \ 2 соответствует любому совпадению 2-й группы и т. Д.

([Рр]) ython & \ 1ails

Сопоставить питона и ведра или Python & ведра

([ ‘ «]) [^ \ 1] * \ 1

Строка в одинарных или двойных кавычках. \ 1 соответствует любому совпадению 1-й группы. \ 2 соответствует любому совпадению 2-й группы и т. Д.

альтернативы

Sr.No. Пример и описание
1

питон | Perl

Совпадение «питон» или «perl»

2

руб (у | ль))

Матч «рубин» или «рубль»

3

Python (+ |!? \)

«Питон», за которым следует один или несколько! или один?

питон | Perl

Совпадение «питон» или «perl»

руб (у | ль))

Матч «рубин» или «рубль»

Python (+ |!? \)

«Питон», за которым следует один или несколько! или один?

Якоря

Для этого необходимо указать позицию матча.

Sr.No. Пример и описание
1

^ Python

Совпадение «Python» в начале строки или внутренней строки

2

Python $

Совпадение «Python» в конце строки или строки

3

\ APython

Совпадение «Python» в начале строки

4

Python \ Z

Совпадение «Python» в конце строки

5

\ bPython \ б

Совпадение «Питон» на границе слова

6

\ brub \ B

\ B является границей без слов: соответствует «rub» в «rube» и «ruby», но не в одиночку

7

Python (?! =)

Совпадение с «Питоном», если за ним следует восклицательный знак.

8

Python (? !!)

Совпадение с «Питоном», если за ним не стоит восклицательный знак.

^ Python

Совпадение «Python» в начале строки или внутренней строки

Python $

Совпадение «Python» в конце строки или строки

\ APython

Совпадение «Python» в начале строки

Python \ Z

Совпадение «Python» в конце строки

\ bPython \ б

Совпадение «Питон» на границе слова

\ brub \ B

\ B является границей без слов: соответствует «rub» в «rube» и «ruby», но не в одиночку

Python (?! =)

Совпадение с «Питоном», если за ним следует восклицательный знак.

Python (? !!)

Совпадение с «Питоном», если за ним не стоит восклицательный знак.

Специальный синтаксис с круглыми скобками

Sr.No. Пример и описание
1

R (? # Комментарий)

Спички «R». Все остальное — комментарий

2

R (? Я) убий

Учитывает регистр при сопоставлении «uby»

3

R (I: убий)

То же, что и выше

4

руб: |) (у ля?)

Группировать только без создания \ 1 обратной ссылки

R (? # Комментарий)

Спички «R». Все остальное — комментарий

R (? Я) убий

Учитывает регистр при сопоставлении «uby»

R (I: убий)

То же, что и выше

руб: |) (у ля?)

Группировать только без создания \ 1 обратной ссылки

Python — CGI Программирование

Common Gateway Interface, или CGI, представляет собой набор стандартов, определяющих, как происходит обмен информацией между веб-сервером и пользовательским сценарием. Спецификации CGI в настоящее время поддерживаются NCSA.

Что такое CGI?

  • Common Gateway Interface, или CGI, является стандартом для внешних программ-шлюзов для взаимодействия с информационными серверами, такими как HTTP-серверы.

  • Текущая версия — CGI / 1.1, а CGI / 1.2 находится в стадии разработки.

Common Gateway Interface, или CGI, является стандартом для внешних программ-шлюзов для взаимодействия с информационными серверами, такими как HTTP-серверы.

Текущая версия — CGI / 1.1, а CGI / 1.2 находится в стадии разработки.

Просмотр веб-страниц

Чтобы понять концепцию CGI, давайте посмотрим, что происходит, когда мы нажимаем гиперссылку для просмотра определенной веб-страницы или URL-адреса.

  • Ваш браузер связывается с веб-сервером HTTP и запрашивает URL, то есть имя файла.

  • Веб-сервер анализирует URL-адрес и ищет имя файла. Если он находит этот файл, то отправляет его обратно в браузер, в противном случае отправляет сообщение об ошибке, указывающее, что вы запросили неправильный файл.

  • Веб-браузер принимает ответ от веб-сервера и отображает либо полученный файл, либо сообщение об ошибке.

Ваш браузер связывается с веб-сервером HTTP и запрашивает URL, то есть имя файла.

Веб-сервер анализирует URL-адрес и ищет имя файла. Если он находит этот файл, то отправляет его обратно в браузер, в противном случае отправляет сообщение об ошибке, указывающее, что вы запросили неправильный файл.

Веб-браузер принимает ответ от веб-сервера и отображает либо полученный файл, либо сообщение об ошибке.

Однако можно настроить HTTP-сервер таким образом, чтобы при запросе файла в определенном каталоге этот файл не отправлялся обратно; вместо этого он выполняется как программа, и все, что выводит эта программа, отправляется обратно в браузер для отображения. Эта функция называется Common Gateway Interface или CGI, а программы называются CGI-скриптами. Этими CGI-программами могут быть Python Script, PERL Script, Shell Script, C или C ++ и т. Д.

Диаграмма архитектуры CGI

CGI Архитектура

Поддержка и настройка веб-сервера

Прежде чем приступить к программированию CGI, убедитесь, что ваш веб-сервер поддерживает CGI и настроен на обработку программ CGI. Все программы CGI, которые должны выполняться сервером HTTP, хранятся в предварительно настроенном каталоге. Этот каталог называется CGI Directory и по соглашению называется / var / www / cgi-bin. По соглашению, файлы CGI имеют расширение как. cgi, но вы также можете хранить свои файлы с расширением Python .py .

По умолчанию сервер Linux настроен для запуска только сценариев в каталоге cgi-bin в / var / www. Если вы хотите указать любой другой каталог для запуска ваших CGI-скриптов, прокомментируйте следующие строки в файле httpd.conf —

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>

<Directory "/var/www/cgi-bin">
Options All
</Directory>

Здесь мы предполагаем, что ваш веб-сервер запущен и работает успешно, и вы можете запустить любую другую программу CGI, такую ​​как Perl или Shell и т. Д.

Первая программа CGI

Вот простая ссылка, которая связана с CGI-скриптом, который называется hello.py . Этот файл хранится в каталоге / var / www / cgi-bin и имеет следующий контент. Перед запуском программы CGI убедитесь, что у вас есть режим изменения файла, используя команду UNIX chmod 755 hello.py, чтобы сделать файл исполняемым.

#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello Word - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! This is my first CGI program</h2>'
print '</body>'
print '</html>'

Если вы нажмете hello.py, то вы получите следующий вывод:

Привет слово! Это моя первая программа CGI

Этот сценарий hello.py представляет собой простой сценарий Python, который записывает свой вывод в файл STDOUT, то есть на экран. Существует одна важная и дополнительная функция, которая должна быть напечатана в первой строке. Тип содержимого: text / html \ r \ n \ r \ n . Эта строка отправляется обратно в браузер и указывает тип контента, который будет отображаться на экране браузера.

К настоящему времени вы, должно быть, уже поняли основную концепцию CGI, и вы можете писать много сложных CGI-программ, используя Python. Этот сценарий может взаимодействовать с любой другой внешней системой также для обмена информацией, такой как СУБД.

Заголовок HTTP

Строка Content-type: text / html \ r \ n \ r \ n является частью HTTP-заголовка, который отправляется браузеру для понимания содержимого. Весь заголовок HTTP будет в следующей форме —

HTTP Field Name: Field Content

For Example
Content-type: text/html\r\n\r\n

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

Sr.No. Заголовок и описание
1

Тип содержимого:

Строка MIME, определяющая формат возвращаемого файла. Примером является Content-type: text / html

2

Истекает: Дата

Дата, когда информация становится недействительной. Он используется браузером, чтобы решить, когда необходимо обновить страницу. Допустимая строка даты в формате 01 января 1998 12:00:00 по Гринвичу.

3

Расположение: URL

URL, который возвращается вместо запрошенного URL. Вы можете использовать это поле для перенаправления запроса в любой файл.

4

Последнее изменение: Дата

Дата последней модификации ресурса.

5

Длина содержимого: N

Длина в байтах возвращаемых данных. Браузер использует это значение, чтобы сообщить примерное время загрузки файла.

6

Набор Cookie: Строка

Установить куки, пропущенные через строку

Тип содержимого:

Строка MIME, определяющая формат возвращаемого файла. Примером является Content-type: text / html

Истекает: Дата

Дата, когда информация становится недействительной. Он используется браузером, чтобы решить, когда необходимо обновить страницу. Допустимая строка даты в формате 01 января 1998 12:00:00 по Гринвичу.

Расположение: URL

URL, который возвращается вместо запрошенного URL. Вы можете использовать это поле для перенаправления запроса в любой файл.

Последнее изменение: Дата

Дата последней модификации ресурса.

Длина содержимого: N

Длина в байтах возвращаемых данных. Браузер использует это значение, чтобы сообщить примерное время загрузки файла.

Набор Cookie: Строка

Установить куки, пропущенные через строку

Переменные среды CGI

Все программы CGI имеют доступ к следующим переменным среды. Эти переменные играют важную роль при написании любой CGI-программы.

Sr.No. Имя и описание переменной
1

ТИП СОДЕРЖИМОГО

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

2

CONTENT_LENGTH

Длина запроса информации. Он доступен только для запросов POST.

3

HTTP_COOKIE

Возвращает установленные куки в виде пары ключ-значение.

4

HTTP_USER_AGENT

Поле заголовка запроса User-Agent содержит информацию о пользовательском агенте, создавшем запрос. Это имя веб-браузера.

5

PATH_INFO

Путь для скрипта CGI.

6

СТРОКА ЗАПРОСА

Информация в кодировке URL, отправляемая с запросом метода GET.

7

REMOTE_ADDR

IP-адрес удаленного хоста, отправляющего запрос. Это полезно для ведения журнала или для аутентификации.

8

УДАЛЕННЫЙ УЗЕЛ

Полное имя хоста, сделавшего запрос. Если эта информация недоступна, тогда REMOTE_ADDR может использоваться для получения IR-адреса.

9

REQUEST_METHOD

Метод, использованный для запроса. Наиболее распространенными методами являются GET и POST.

10

SCRIPT_FILENAME

Полный путь к скрипту CGI.

11

SCRIPT_NAME

Название скрипта CGI.

12

НАЗВАНИЕ СЕРВЕРА

Имя хоста или IP-адрес сервера

13

SERVER_SOFTWARE

Название и версия программного обеспечения, на котором работает сервер.

ТИП СОДЕРЖИМОГО

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

CONTENT_LENGTH

Длина запроса информации. Он доступен только для запросов POST.

HTTP_COOKIE

Возвращает установленные куки в виде пары ключ-значение.

HTTP_USER_AGENT

Поле заголовка запроса User-Agent содержит информацию о пользовательском агенте, создавшем запрос. Это имя веб-браузера.

PATH_INFO

Путь для скрипта CGI.

СТРОКА ЗАПРОСА

Информация в кодировке URL, отправляемая с запросом метода GET.

REMOTE_ADDR

IP-адрес удаленного хоста, отправляющего запрос. Это полезно для ведения журнала или для аутентификации.

УДАЛЕННЫЙ УЗЕЛ

Полное имя хоста, сделавшего запрос. Если эта информация недоступна, тогда REMOTE_ADDR может использоваться для получения IR-адреса.

REQUEST_METHOD

Метод, использованный для запроса. Наиболее распространенными методами являются GET и POST.

SCRIPT_FILENAME

Полный путь к скрипту CGI.

SCRIPT_NAME

Название скрипта CGI.

НАЗВАНИЕ СЕРВЕРА

Имя хоста или IP-адрес сервера

SERVER_SOFTWARE

Название и версия программного обеспечения, на котором работает сервер.

Вот небольшая программа CGI, чтобы перечислить все переменные CGI. Нажмите на эту ссылку, чтобы увидеть результат Получить среду

#!/usr/bin/python

import os

print "Content-type: text/html\r\n\r\n";
print "<font size=+1>Environment</font><\br>";
for param in os.environ.keys():
   print "<b>%20s</b>: %s<\br>" % (param, os.environ[param])

GET и POST методы

Вы, должно быть, сталкивались со многими ситуациями, когда вам нужно было передать некоторую информацию из вашего браузера на веб-сервер и, в конечном счете, в вашу программу CGI. Чаще всего браузер использует два метода, которые передают эту информацию на веб-сервер. Это методы GET и POST.

Передача информации с использованием метода GET

Метод GET отправляет закодированную информацию пользователя, добавленную к запросу страницы. Страница и закодированная информация разделены знаком? персонаж следующим образом —

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

Метод GET является методом по умолчанию для передачи информации из браузера на веб-сервер, и он создает длинную строку, которая появляется в поле «Местоположение:» вашего браузера. Никогда не используйте метод GET, если у вас есть пароль или другая конфиденциальная информация для передачи на сервер. Метод GET имеет ограничение по размеру: в строку запроса можно отправить только 1024 символа. Метод GET отправляет информацию с использованием заголовка QUERY_STRING и будет доступен в вашей CGI-программе через переменную среды QUERY_STRING.

Вы можете передавать информацию, просто объединяя пары ключ-значение вместе с любым URL-адресом или используя HTML-теги <FORM> для передачи информации с помощью метода GET.

Пример простого URL: метод Get

Вот простой URL, который передает два значения программе hello_get.py с помощью метода GET.

/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI

Ниже приведен скрипт hello_get.py для обработки входных данных, данных веб-браузером. Мы собираемся использовать модуль cgi , который позволяет очень легко получить доступ к переданной информации —

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

Это приведет к следующему результату —

Привет ЗАРА АЛИ

Пример простой формы: метод GET

Этот пример передает два значения, используя HTML FORM и кнопку отправки. Мы используем тот же сценарий CGI hello_get.py для обработки этого ввода.

<form action = "/cgi-bin/hello_get.py" method = "get">
First Name: <input type = "text" name = "first_name">  <br />

Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>

Вот фактический результат вышеприведенной формы, вы вводите Имя и Фамилию и затем нажимаете кнопку отправки, чтобы увидеть результат.

Имя:
Фамилия:

Передача информации с использованием метода POST

Обычно более надежным методом передачи информации в CGI-программу является метод POST. Это упаковывает информацию точно так же, как методы GET, но вместо отправки ее в виде текстовой строки после символа? в URL он отправляет его как отдельное сообщение. Это сообщение поступает в CGI-скрипт в виде стандартного ввода.

Ниже приведен тот же скрипт hello_get.py, который обрабатывает GET, а также метод POST.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

Давайте снова возьмем тот же пример, что и выше, который передает два значения, используя HTML FORM и кнопку submit. Мы используем тот же сценарий CGI hello_get.py для обработки этого ввода.

<form action = "/cgi-bin/hello_get.py" method = "post">
First Name: <input type = "text" name = "first_name"><br />
Last Name: <input type = "text" name = "last_name" />

<input type = "submit" value = "Submit" />
</form>

Вот фактический результат вышеприведенной формы. Вы вводите имя и фамилию, а затем нажимаете кнопку «Отправить», чтобы увидеть результат.

Имя:
Фамилия:

Передача данных флажка в программу CGI

Флажки используются, когда требуется выбрать более одной опции.

Вот пример HTML-кода для формы с двумя флажками —

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on" /> Maths
<input type = "checkbox" name = "physics" value = "on" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

Результатом этого кода является следующая форма —

математика физика

Ниже приведен скрипт checkbox.cgi для обработки ввода, заданного веб-браузером для кнопки-флажка.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('maths'):
   math_flag = "ON"
else:
   math_flag = "OFF"

if form.getvalue('physics'):
   physics_flag = "ON"
else:
   physics_flag = "OFF"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"

Передача данных переключателей в программу CGI

Радиокнопки используются, когда требуется выбрать только одну опцию.

Вот пример HTML-кода для формы с двумя переключателями —

<form action = "/cgi-bin/radiobutton.py" method = "post" target = "_blank">
<input type = "radio" name = "subject" value = "maths" /> Maths
<input type = "radio" name = "subject" value = "physics" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

Результатом этого кода является следующая форма —

математика физика

Ниже приведен скрипт radiobutton.py для обработки ввода, заданного веб-браузером для переключателя —

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('subject'):
   subject = form.getvalue('subject')
else:
   subject = "Not set"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Radio - Fourth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

Передача данных текстовой области в программу CGI

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

Вот пример HTML-кода для формы с полем TEXTAREA —

<form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
<textarea name = "textcontent" cols = "40" rows = "4">
Type your text here...
</textarea>
<input type = "submit" value = "Submit" />
</form>

Результатом этого кода является следующая форма —

Ниже приведен скрипт textarea.cgi для обработки входных данных, данных веб-браузером.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Entered Text Content is %s</h2>" % text_content
print "</body>"

Передача данных выпадающего списка в программу CGI

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

Вот пример HTML-кода для формы с одним выпадающим списком —

<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank">
<select name = "dropdown">
<option value = "Maths" selected>Maths</option>
<option value = "Physics">Physics</option>
</select>
<input type = "submit" value = "Submit"/>
</form>

Результатом этого кода является следующая форма —

Ниже приведен скрипт dropdown.py для обработки входных данных, данных веб-браузером.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('dropdown'):
   subject = form.getvalue('dropdown')
else:
   subject = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Dropdown Box - Sixth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

Использование Cookies в CGI

Протокол HTTP — это протокол без сохранения состояния. Для коммерческого веб-сайта требуется хранить информацию о сеансе на разных страницах. Например, регистрация одного пользователя заканчивается после заполнения множества страниц. Как сохранить информацию о сеансе пользователя на всех веб-страницах?

Во многих ситуациях использование файлов cookie является наиболее эффективным способом запоминания и отслеживания предпочтений, покупок, комиссий и другой информации, необходимой для лучшего восприятия посетителями сайта или статистики сайта.

Как это устроено?

Ваш сервер отправляет некоторые данные в браузер посетителя в виде файла cookie. Браузер может принять куки. Если это так, он сохраняется в виде простой текстовой записи на жестком диске посетителя. Теперь, когда посетитель заходит на другую страницу вашего сайта, файл cookie становится доступным для поиска. После получения ваш сервер знает / запоминает, что было сохранено.

Cookies — это запись данных в виде простого текста из 5 полей переменной длины —

  • Истекает — дата окончания срока действия куки. Если это поле пустое, срок действия файла cookie истечет, когда посетитель выйдет из браузера.

  • Домен — доменное имя вашего сайта.

  • Путь — путь к каталогу или веб-странице, которая устанавливает cookie. Это может быть пустым, если вы хотите получить куки из любого каталога или страницы.

  • Безопасный — если в этом поле содержится слово «безопасный», то файл cookie может быть получен только с безопасного сервера. Если это поле пустое, такого ограничения не существует.

  • Имя = значение — файлы cookie устанавливаются и извлекаются в форме пар ключ-значение.

Истекает — дата окончания срока действия куки. Если это поле пустое, срок действия файла cookie истечет, когда посетитель выйдет из браузера.

Домен — доменное имя вашего сайта.

Путь — путь к каталогу или веб-странице, которая устанавливает cookie. Это может быть пустым, если вы хотите получить куки из любого каталога или страницы.

Безопасный — если в этом поле содержится слово «безопасный», то файл cookie может быть получен только с безопасного сервера. Если это поле пустое, такого ограничения не существует.

Имя = значение — файлы cookie устанавливаются и извлекаются в форме пар ключ-значение.

Настройка Cookies

Отправить куки в браузер очень просто. Эти файлы cookie отправляются вместе с заголовком HTTP перед полем Content-type. Предполагая, что вы хотите установить идентификатор пользователя и пароль в качестве файлов cookie. Настройка файлов cookie производится следующим образом:

#!/usr/bin/python

print "Set-Cookie:UserID = XYZ;\r\n"
print "Set-Cookie:Password = XYZ123;\r\n"
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT";\r\n"
print "Set-Cookie:Domain = www.tutorialspoint.com;\r\n"
print "Set-Cookie:Path = /perl;\n"
print "Content-type:text/html\r\n\r\n"
...........Rest of the HTML Content....

Из этого примера вы должны понимать, как устанавливать файлы cookie. Мы используем HTTP-заголовок Set-Cookie для установки файлов cookie.

Необязательно устанавливать атрибуты cookie, такие как Expires, Domain и Path. Примечательно, что куки устанавливаются перед отправкой волшебной строки «Content-type: text / html \ r \ n \ r \ n .

Получение куки

Получить все установленные куки очень просто. Файлы cookie хранятся в переменной среды CGI HTTP_COOKIE и имеют следующую форму:

key1 = value1;key2 = value2;key3 = value3....

Вот пример того, как получить куки.

#!/usr/bin/python

# Import modules for CGI handling 
from os import environ
import cgi, cgitb

if environ.has_key('HTTP_COOKIE'):
   for cookie in map(strip, split(environ['HTTP_COOKIE'], ';')):
      (key, value ) = split(cookie, '=');
      if key == "UserID":
         user_id = value

      if key == "Password":
         password = value

print "User ID  = %s" % user_id
print "Password = %s" % password

Это дает следующий результат для файлов cookie, установленных вышеуказанным сценарием:

User ID = XYZ
Password = XYZ123

Пример загрузки файла

Чтобы загрузить файл, в HTML-форме атрибут enctype должен иметь значение multipart / form-data . Тег ввода с типом файла создает кнопку «Обзор».

<html>
<body>
   <form enctype = "multipart/form-data" 
                     action = "save_file.py" method = "post">
   <p>File: <input type = "file" name = "filename" /></p>
   <p><input type = "submit" value = "Upload" /></p>
   </form>
</body>
</html>

Результатом этого кода является следующая форма —

Файл:

Файл:

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

Вот скрипт save_file.py для обработки загрузки файла —

#!/usr/bin/python

import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# Get filename here.
fileitem = form['filename']

# Test if the file was uploaded
if fileitem.filename:
   # strip leading path from file name to avoid 
   # directory traversal attacks
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = 'The file "' + fn + '" was uploaded successfully'
   
else:
   message = 'No file was uploaded'
   
print """\
Content-Type: text/html\n
<html>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,)

Если вы запустите вышеупомянутый скрипт в Unix / Linux, вам нужно позаботиться о замене разделителя файлов следующим образом, иначе на вашем компьютере с Windows выше оператор open () должен работать нормально.

fn = os.path.basename(fileitem.filename.replace("\\", "/" ))

Как открыть диалоговое окно «Загрузка файла»?

Иногда желательно, чтобы вы указали опцию, в которой пользователь может щелкнуть ссылку, и вместо всплывающего окна отображается всплывающее диалоговое окно «Загрузка файла». Это очень просто и может быть достигнуто через HTTP-заголовок. Этот заголовок HTTP отличается от заголовка, упомянутого в предыдущем разделе.

Например, если вы хотите сделать файл FileName загружаемым по заданной ссылке, его синтаксис будет следующим:

#!/usr/bin/python

# HTTP Header
print " Content-Type: application/octet-stream; name = \"FileName\"\r\n";
print " Content-Disposition: attachment; filename = \"FileName\"\r\n\n";

# Actual File Content will go here.
fo = open("foo.txt", "rb")

str = fo.read();
print str

# Close opend file
fo.close()

Надеюсь, вам понравился этот урок. Если да, пожалуйста, отправьте мне свой отзыв по адресу: Свяжитесь с нами

Python — доступ к базе данных MySQL

Стандарт Python для интерфейсов базы данных — это DB-API Python. Большинство интерфейсов баз данных Python соответствуют этому стандарту.

Вы можете выбрать правильную базу данных для вашего приложения. Python Database API поддерживает широкий спектр серверов баз данных, таких как —

  • овод
  • Msql
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • оракул
  • Sybase

Вот список доступных интерфейсов базы данных Python : Интерфейсы базы данных Python и API . Вы должны загрузить отдельный модуль API БД для каждой базы данных, к которой вам нужен доступ. Например, если вам нужен доступ к базе данных Oracle, а также к базе данных MySQL, вы должны загрузить модули базы данных Oracle и MySQL.

API БД обеспечивает минимальный стандарт для работы с базами данных, использующими структуры и синтаксис Python, где это возможно. Этот API включает в себя следующее:

  • Импорт модуля API.
  • Получение соединения с базой данных.
  • Выдача операторов SQL и хранимых процедур.
  • Закрытие соединения

Мы изучим все концепции с использованием MySQL, поэтому давайте поговорим о модуле MySQLdb.

Что такое MySQLdb?

MySQLdb — это интерфейс для подключения к серверу баз данных MySQL из Python. Он реализует API базы данных Python v2.0 и построен поверх MySQL C API.

Как установить MySQLdb?

Прежде чем продолжить, убедитесь, что на вашем компьютере установлен MySQLdb. Просто введите следующее в вашем скрипте Python и выполните его —

#!/usr/bin/python

import MySQLdb

Если он дает следующий результат, то это означает, что модуль MySQLdb не установлен —

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      import MySQLdb
ImportError: No module named MySQLdb

Чтобы установить модуль MySQLdb, используйте следующую команду —

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
For Fedora, use the following command -
$ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

Примечание. Убедитесь, что у вас есть права root для установки вышеуказанного модуля.

Подключение к базе данных

Перед подключением к базе данных MySQL убедитесь в следующем:

  • Вы создали базу данных TESTDB.

  • Вы создали таблицу EMPLOYEE в TESTDB.

  • В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

  • Идентификатор пользователя «testuser» и пароль «test123» установлены для доступа к TESTDB.

  • Python-модуль MySQLdb правильно установлен на вашем компьютере.

  • Вы прошли учебник по MySQL, чтобы понять основы MySQL.

Вы создали базу данных TESTDB.

Вы создали таблицу EMPLOYEE в TESTDB.

В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

Идентификатор пользователя «testuser» и пароль «test123» установлены для доступа к TESTDB.

Python-модуль MySQLdb правильно установлен на вашем компьютере.

Вы прошли учебник по MySQL, чтобы понять основы MySQL.

пример

Ниже приведен пример соединения с базой данных MySQL «TESTDB».

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

Во время выполнения этого скрипта он выдает следующий результат на моей машине с Linux.

Database version : 5.0.45

Если соединение с источником данных установлено, то объект соединения возвращается и сохраняется в БД для дальнейшего использования, в противном случае для БД установлено значение Нет. Затем объект db используется для создания объекта курсора , который, в свою очередь, используется для выполнения запросов SQL. Наконец, перед выходом он гарантирует, что соединение с базой данных закрыто и ресурсы освобождены.

Создание таблицы базы данных

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

пример

Давайте создадим таблицу базы данных EMPLOYEE —

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

ВСТАВИТЬ Операция

Это необходимо, когда вы хотите создать свои записи в таблице базы данных.

пример

В следующем примере выполняется инструкция SQL INSERT для создания записи в таблице EMPLOYEE —

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Приведенный выше пример может быть написан следующим образом для динамического создания запросов SQL:

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

пример

Следующий фрагмент кода является еще одной формой выполнения, где вы можете передавать параметры напрямую —

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

ЧИТАЙТЕ Операцию

Чтение Операция с любой базой данных означает получение некоторой полезной информации из базы данных.

Как только наше соединение с базой данных установлено, вы готовы сделать запрос в эту базу данных. Вы можете использовать либо метод fetchone () для извлечения отдельной записи, либо метод fetchall () для извлечения нескольких значений из таблицы базы данных.

  • fetchone () — извлекает следующую строку из набора результатов запроса. Результирующий набор — это объект, который возвращается, когда объект-курсор используется для запроса таблицы.

  • fetchall () — извлекает все строки в наборе результатов. Если некоторые строки уже были извлечены из результирующего набора, то он извлекает оставшиеся строки из результирующего набора.

  • rowcount — это атрибут только для чтения, который возвращает количество строк, на которые воздействовал метод execute ().

fetchone () — извлекает следующую строку из набора результатов запроса. Результирующий набор — это объект, который возвращается, когда объект-курсор используется для запроса таблицы.

fetchall () — извлекает все строки в наборе результатов. Если некоторые строки уже были извлечены из результирующего набора, то он извлекает оставшиеся строки из результирующего набора.

rowcount — это атрибут только для чтения, который возвращает количество строк, на которые воздействовал метод execute ().

пример

Следующая процедура запрашивает все записи из таблицы EMPLOYEE с зарплатой более 1000 —

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

Это даст следующий результат —

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

Операция обновления

ОБНОВЛЕНИЕ Операция в любой базе данных означает обновление одной или нескольких записей, которые уже доступны в базе данных.

Следующая процедура обновляет все записи, имеющие SEX как «M» . Здесь мы увеличиваем ВОЗРАСТ всех мужчин на один год.

пример

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

УДАЛЕНИЕ Операция

Операция DELETE требуется, когда вы хотите удалить некоторые записи из вашей базы данных. Ниже описана процедура удаления всех записей из РАБОТНИКА, где ВОЗРАСТ больше 20 —

пример

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Выполнение транзакций

Транзакции — это механизм, который обеспечивает согласованность данных. Транзакции имеют следующие четыре свойства —

  • Атомарность — либо транзакция завершена, либо ничего не происходит вообще.

  • Согласованность — транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.

  • Изоляция — промежуточные результаты транзакции не видны за пределами текущей транзакции.

  • Долговечность — после совершения транзакции последствия сохраняются даже после сбоя системы.

Атомарность — либо транзакция завершена, либо ничего не происходит вообще.

Согласованность — транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.

Изоляция — промежуточные результаты транзакции не видны за пределами текущей транзакции.

Долговечность — после совершения транзакции последствия сохраняются даже после сбоя системы.

Python DB API 2.0 предоставляет два метода для фиксации или отката транзакции.

пример

Вы уже знаете, как осуществлять транзакции. Вот снова похожий пример —

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

Операция COMMIT

Фиксация — это операция, которая дает зеленый сигнал базе данных для завершения изменений, и после этой операции никакие изменения не могут быть возвращены обратно.

Вот простой пример вызова метода commit .

db.commit()

ROLLBACK Операция

Если вас не устраивает одно или несколько изменений, и вы хотите полностью отменить эти изменения, используйте метод rollback () .

Вот простой пример вызова метода rollback () .

db.rollback()

Отключение базы данных

Чтобы отключить соединение с базой данных, используйте метод close ().

db.close()

Если соединение с базой данных закрывается пользователем методом close (), все незавершенные транзакции откатываются БД. Однако вместо того, чтобы зависеть от какой-либо детали реализации низкоуровневой БД, вашему приложению лучше явно вызывать commit или rollback.

Обработка ошибок

Есть много источников ошибок. Вот несколько примеров: синтаксическая ошибка в выполненном операторе SQL, сбой соединения или вызов метода выборки для уже отмененного или законченного дескриптора оператора.

DB API определяет количество ошибок, которые должны существовать в каждом модуле базы данных. В следующей таблице перечислены эти исключения.

Sr.No. Исключение и описание
1

Предупреждение

Используется для нефатальных проблем. Должен подкласс StandardError.

2

ошибка

Базовый класс для ошибок. Должен подкласс StandardError.

3

InterfaceError

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

4

Ошибка базы данных

Используется для ошибок в базе данных. Ошибка подкласса.

5

DataError

Подкласс DatabaseError, который ссылается на ошибки в данных.

6

OperationalError

Подкласс DatabaseError, который ссылается на ошибки, такие как потеря соединения с базой данных. Эти ошибки обычно находятся вне контроля скрипта Python.

7

IntegrityError

Подкласс DatabaseError для ситуаций, которые могут повредить целостности отношений, таких как ограничения уникальности или внешние ключи.

8

Внутренняя ошибка

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

9

ProgrammingError

Подкласс DatabaseError, который ссылается на ошибки, такие как неверное имя таблицы и другие вещи, которые можно смело обвинять в вас.

10

NotSupportedError

Подкласс DatabaseError, который относится к попытке вызвать неподдерживаемую функциональность.

Предупреждение

Используется для нефатальных проблем. Должен подкласс StandardError.

ошибка

Базовый класс для ошибок. Должен подкласс StandardError.

InterfaceError

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

Ошибка базы данных

Используется для ошибок в базе данных. Ошибка подкласса.

DataError

Подкласс DatabaseError, который ссылается на ошибки в данных.

OperationalError

Подкласс DatabaseError, который ссылается на ошибки, такие как потеря соединения с базой данных. Эти ошибки обычно находятся вне контроля скрипта Python.

IntegrityError

Подкласс DatabaseError для ситуаций, которые могут повредить целостности отношений, таких как ограничения уникальности или внешние ключи.

Внутренняя ошибка

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

ProgrammingError

Подкласс DatabaseError, который ссылается на ошибки, такие как неверное имя таблицы и другие вещи, которые можно смело обвинять в вас.

NotSupportedError

Подкласс DatabaseError, который относится к попытке вызвать неподдерживаемую функциональность.

Ваши скрипты Python должны обрабатывать эти ошибки, но перед использованием любого из вышеперечисленных исключений убедитесь, что ваш MySQLdb поддерживает это исключение. Вы можете получить больше информации о них, прочитав спецификацию DB API 2.0.

Python — Сетевое программирование

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

В Python также есть библиотеки, которые предоставляют высокоуровневый доступ к определенным сетевым протоколам прикладного уровня, таким как FTP, HTTP и так далее.

Эта глава дает вам понимание самой известной концепции в сети — Socket Programming.

Что такое сокеты?

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

Сокеты могут быть реализованы для нескольких различных типов каналов: доменные сокеты Unix, TCP, UDP и т. Д. Библиотека сокетов предоставляет специальные классы для обработки общих транспортов, а также универсальный интерфейс для обработки остальных.

Сокеты имеют свой собственный словарь —

Sr.No. Срок и описание
1

Домен

Семейство протоколов, которое используется в качестве транспортного механизма. Эти значения являются константами, такими как AF_INET, PF_INET, PF_UNIX, PF_X25 и т. Д.

2

тип

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

3

протокол

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

4

имя хоста

Идентификатор сетевого интерфейса —

  • Строка, которая может быть именем хоста, четырехточечным адресом или IPV6-адресом в двоеточии (и, возможно, точечной) нотации.

  • Строка «<broadcast>», которая указывает адрес INADDR_BROADCAST.

  • Строка нулевой длины, которая указывает INADDR_ANY, или

  • Целое число, интерпретируемое как двоичный адрес в порядке байтов хоста.

5

порт

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

Домен

Семейство протоколов, которое используется в качестве транспортного механизма. Эти значения являются константами, такими как AF_INET, PF_INET, PF_UNIX, PF_X25 и т. Д.

тип

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

протокол

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

имя хоста

Идентификатор сетевого интерфейса —

Строка, которая может быть именем хоста, четырехточечным адресом или IPV6-адресом в двоеточии (и, возможно, точечной) нотации.

Строка «<broadcast>», которая указывает адрес INADDR_BROADCAST.

Строка нулевой длины, которая указывает INADDR_ANY, или

Целое число, интерпретируемое как двоичный адрес в порядке байтов хоста.

порт

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

Модуль розетки

Чтобы создать сокет, вы должны использовать функцию socket.socket (), доступную в модуле сокета , который имеет общий синтаксис —

s = socket.socket (socket_family, socket_type, protocol=0)

Вот описание параметров —

  • socket_family — это либо AF_UNIX, либо AF_INET, как объяснялось ранее.

  • socket_type — это либо SOCK_STREAM, либо SOCK_DGRAM.

  • протокол — обычно не указывается, по умолчанию 0.

socket_family — это либо AF_UNIX, либо AF_INET, как объяснялось ранее.

socket_type — это либо SOCK_STREAM, либо SOCK_DGRAM.

протокол — обычно не указывается, по умолчанию 0.

Если у вас есть объект сокета , вы можете использовать необходимые функции для создания клиентской или серверной программы. Ниже приведен список необходимых функций —

Методы сокета сервера

Sr.No. Метод и описание
1

s.bind ()

Этот метод привязывает адрес (имя хоста, пара номеров портов) к сокету.

2

s.listen ()

Этот метод устанавливает и запускает прослушиватель TCP.

3

s.accept ()

Это пассивно принимает TCP-клиентское соединение, ожидая, пока соединение не будет установлено (блокируется).

s.bind ()

Этот метод привязывает адрес (имя хоста, пара номеров портов) к сокету.

s.listen ()

Этот метод устанавливает и запускает прослушиватель TCP.

s.accept ()

Это пассивно принимает TCP-клиентское соединение, ожидая, пока соединение не будет установлено (блокируется).

Методы клиентских сокетов

Sr.No. Метод и описание
1

s.connect ()

Этот метод активно инициирует подключение к серверу TCP.

s.connect ()

Этот метод активно инициирует подключение к серверу TCP.

Общие методы сокетов

Sr.No. Метод и описание
1

s.recv ()

Этот метод получает сообщение TCP

2

s.send ()

Этот метод передает сообщение TCP

3

s.recvfrom ()

Этот метод получает сообщение UDP

4

s.sendto ()

Этот метод передает сообщение UDP

5

s.close ()

Этот метод закрывает сокет

6

socket.gethostname ()

Возвращает имя хоста.

s.recv ()

Этот метод получает сообщение TCP

s.send ()

Этот метод передает сообщение TCP

s.recvfrom ()

Этот метод получает сообщение UDP

s.sendto ()

Этот метод передает сообщение UDP

s.close ()

Этот метод закрывает сокет

socket.gethostname ()

Возвращает имя хоста.

Простой сервер

Для написания интернет-серверов мы используем функцию сокета, доступную в модуле сокета, для создания объекта сокета. Затем объект сокета используется для вызова других функций для настройки сервера сокетов.

Теперь вызовите функцию bind (hostname, port), чтобы указать порт для вашего сервиса на данном хосте.

Затем вызовите метод accept возвращаемого объекта. Этот метод ожидает подключения клиента к указанному вами порту, а затем возвращает объект подключения , представляющий соединение с этим клиентом.

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection

Простой клиент

Давайте напишем очень простую клиентскую программу, которая открывает соединение с данным портом 12345 и данным хостом. Это очень просто для создания клиента сокета с помощью функции модуля сокета Python.

Socket.connect (имя хоста, порт) открывает TCP-соединение с именем хоста на порту . Когда у вас есть открытый сокет, вы можете читать из него, как любой объект ввода-вывода. Когда закончите, не забудьте закрыть его, как вы бы закрыли файл.

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

#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close()                  # Close the socket when done

Теперь запустите этот server.py в фоновом режиме, а затем запустите выше client.py, чтобы увидеть результат.

# Following would start a server in background.
$ python server.py & 

# Once server is started run client as follows:
$ python client.py

Это даст следующий результат —

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Интернет-модули Python

Список некоторых важных модулей в Python Network / Интернет-программирование.

протокол Общая функция Порт № Модуль Python
HTTP интернет страницы 80 httplib, urllib, xmlrpclib
NNTP Новости Usenet 119 nntplib
FTP Передача файлов 20 ftplib, urllib
SMTP Отправка электронной почты 25 smtplib
POP3 Получение электронной почты 110 poplib
IMAP4 Получение электронной почты 143 imaplib
Telnet Командные строки 23 telnetlib
суслик Передача документов 70 суслик, урлиб

Пожалуйста, проверьте все библиотеки, упомянутые выше, для работы с протоколами FTP, SMTP, POP и IMAP.

Дальнейшие чтения

Это было быстрое начало с программированием сокетов. Это обширная тема. Рекомендуется перейти по следующей ссылке, чтобы найти более подробную информацию —

Unix Socket Программирование .

Python Socket Library и модули .

Python — отправка электронной почты с использованием SMTP

Простой протокол передачи почты (SMTP) — это протокол, который обрабатывает отправку электронной почты и маршрутизацию электронной почты между почтовыми серверами.

Python предоставляет модуль smtplib , который определяет объект сеанса клиента SMTP, который можно использовать для отправки почты на любой компьютер Интернета с демоном слушателя SMTP или ESMTP.

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

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

Вот детали параметров —

  • хост — это хост, на котором работает ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.

  • порт — если вы предоставляете аргумент хоста , вам нужно указать порт, который прослушивает SMTP-сервер. Обычно этот порт будет 25.

  • local_hostname — если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost из этой опции.

хост — это хост, на котором работает ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.

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

local_hostname — если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost из этой опции.

У объекта SMTP есть метод экземпляра, называемый sendmail , который обычно используется для отправки сообщения по почте. Требуется три параметра —

  • Отправитель — строка с адресом отправителя.

  • Получатели — список строк, по одной для каждого получателя.

  • Сообщение — сообщение в виде строки, отформатированной так, как указано в различных RFC.

Отправитель — строка с адресом отправителя.

Получатели — список строк, по одной для каждого получателя.

Сообщение — сообщение в виде строки, отформатированной так, как указано в различных RFC.

пример

Вот простой способ отправить одно электронное письмо, используя скрипт Python. Попробуйте один раз —

#!/usr/bin/python

import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

Здесь вы разместили в сообщении основную электронную почту, используя тройную кавычку, стараясь правильно отформатировать заголовки. Для электронного письма требуются заголовки « От» , « Кому» и « Тема» , отделенные от тела письма пустой строкой.

Для отправки почты вы используете smtpObj для подключения к SMTP-серверу на локальном компьютере, а затем используете метод sendmail вместе с сообщением, адресом от и адресом назначения в качестве параметров (даже если адреса от и до находятся в пределах сама почта, они не всегда используются для маршрутизации почты).

Если вы не используете SMTP-сервер на своем локальном компьютере, вы можете использовать клиент smtplib для связи с удаленным SMTP-сервером. Если вы не используете службу веб-почты (например, Hotmail или Yahoo! Mail), ваш провайдер электронной почты должен предоставить вам данные сервера исходящей почты, которые вы можете предоставить им, а именно:

smtplib.SMTP('mail.your-domain.com', 25)

Отправка электронной почты в формате HTML с использованием Python

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

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

пример

Ниже приведен пример отправки содержимого HTML в виде электронного письма. Попробуйте один раз —

#!/usr/bin/python

import smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

Отправка вложений по электронной почте

Для отправки электронного письма со смешанным контентом требуется установить заголовок Content-type в multipart / mixed . Затем разделы текста и вложения могут быть указаны в границах .

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

Прикрепленные файлы должны быть закодированы с помощью функции pack («m»), чтобы кодирование base64 перед передачей.

пример

Ниже приведен пример, который отправляет файл /tmp/test.txt в качестве вложения. Попробуйте один раз —

#!/usr/bin/python

import smtplib
import base64

filename = "/tmp/test.txt"

# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = 'webmaster@tutorialpoint.com'
reciever = 'amrood.admin@gmail.com'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print "Error: unable to send email"

Python — многопоточное программирование

Запуск нескольких потоков аналогичен запуску нескольких различных программ одновременно, но со следующими преимуществами:

  • Несколько потоков внутри процесса совместно используют одно и то же пространство данных с основным потоком и поэтому могут обмениваться информацией или общаться друг с другом легче, чем если бы они были отдельными процессами.

  • Потоки иногда называют легкими процессами, и они не требуют больших затрат памяти; они дешевле, чем процессы.

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

Потоки иногда называют легкими процессами, и они не требуют больших затрат памяти; они дешевле, чем процессы.

Поток имеет начало, последовательность выполнения и заключение. У него есть указатель инструкции, который отслеживает, где в его контексте он работает.

  • Это может быть прервано (прервано)

  • Он может быть временно приостановлен (также известный как спящий режим) во время работы других потоков — это называется уступкой.

Это может быть прервано (прервано)

Он может быть временно приостановлен (также известный как спящий режим) во время работы других потоков — это называется уступкой.

Начиная новую тему

Чтобы создать другой поток, вам нужно вызвать следующий метод, доступный в модуле потока

thread.start_new_thread ( function, args[, kwargs] )

Этот вызов метода позволяет быстро и эффективно создавать новые потоки как в Linux, так и в Windows.

Вызов метода немедленно возвращается, и дочерний поток запускается и вызывает функцию с переданным списком аргументов . Когда функция возвращается, поток завершается.

Здесь args — это кортеж аргументов; используйте пустой кортеж для вызова функции без передачи аргументов. kwargs — это необязательный словарь аргументов ключевых слов.

пример

#!/usr/bin/python

import thread
import time

# Define a function for the thread
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print "%s: %s" % ( threadName, time.ctime(time.time()) )

# Create two threads as follows
try:
   thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print "Error: unable to start thread"

while 1:
   pass

Когда приведенный выше код выполняется, он дает следующий результат —

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

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

Поточный модуль

Более новый модуль потоков, включенный в Python 2.4, обеспечивает гораздо более мощную высокоуровневую поддержку потоков, чем модуль потоков, рассмотренный в предыдущем разделе.

Модуль потоков предоставляет все методы модуля потоков и предоставляет некоторые дополнительные методы:

  • threading.activeCount () — возвращает количество активных объектов потока.

  • threading.currentThread () — возвращает количество объектов потока в элементе управления потока вызывающей стороны.

  • threading.enumerate () — возвращает список всех объектов потока, которые в данный момент активны.

threading.activeCount () — возвращает количество активных объектов потока.

threading.currentThread () — возвращает количество объектов потока в элементе управления потока вызывающей стороны.

threading.enumerate () — возвращает список всех объектов потока, которые в данный момент активны.

В дополнение к методам, у модуля потоков есть класс Thread, который реализует потоки. Методы, предоставляемые классом Thread , следующие:

  • run () — Метод run () является точкой входа для потока.

  • start () — метод start () запускает поток, вызывая метод run.

  • join ([время]) — join () ожидает завершения потоков.

  • isAlive () — метод isAlive () проверяет, выполняется ли еще поток.

  • getName () — Метод getName () возвращает имя потока.

  • setName () — Метод setName () устанавливает имя потока.

run () — Метод run () является точкой входа для потока.

start () — метод start () запускает поток, вызывая метод run.

join ([время]) — join () ожидает завершения потоков.

isAlive () — метод isAlive () проверяет, выполняется ли еще поток.

getName () — Метод getName () возвращает имя потока.

setName () — Метод setName () устанавливает имя потока.

Создание темы с использованием модуля Threading

Чтобы реализовать новый поток с помощью модуля потоков, вы должны сделать следующее:

  • Определите новый подкласс класса Thread .

  • Переопределите метод __init __ (self [, args]), чтобы добавить дополнительные аргументы.

  • Затем переопределите метод run (self [, args]), чтобы реализовать то, что поток должен делать при запуске.

Определите новый подкласс класса Thread .

Переопределите метод __init __ (self [, args]), чтобы добавить дополнительные аргументы.

Затем переопределите метод run (self [, args]), чтобы реализовать то, что поток должен делать при запуске.

Создав новый подкласс Thread , вы можете создать его экземпляр, а затем запустить новый поток, вызвав метод start () , который, в свою очередь, вызывает метод run () .

пример

#!/usr/bin/python

import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      print_time(self.name, self.counter, 5)
      print "Exiting " + self.name

def print_time(threadName, counter, delay):
   while counter:
      if exitFlag:
         threadName.exit()
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

print "Exiting Main Thread"

Когда приведенный выше код выполняется, он дает следующий результат —

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2

Синхронизация потоков

Модуль потоков, поставляемый с Python, включает в себя простой в реализации механизм блокировки, который позволяет синхронизировать потоки. Новая блокировка создается путем вызова метода Lock () , который возвращает новую блокировку.

Метод получения (блокирования) нового объекта блокировки используется для принудительной синхронной работы потоков. Необязательный параметр блокировки позволяет вам контролировать, ожидает ли поток получения блокировки.

Если для блокировки установлено значение 0, поток немедленно возвращает значение 0, если блокировка не может быть получена, и 1, если блокировка получена. Если для блокировки установлено значение 1, поток блокируется и ожидает снятия блокировки.

Метод release () нового объекта блокировки используется для снятия блокировки, когда она больше не требуется.

пример

#!/usr/bin/python

import threading
import time

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      # Get lock to synchronize threads
      threadLock.acquire()
      print_time(self.name, self.counter, 3)
      # Free lock to release next thread
      threadLock.release()

def print_time(threadName, delay, counter):
   while counter:
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

threadLock = threading.Lock()
threads = []

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

# Add threads to thread list
threads.append(thread1)
threads.append(thread2)

# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"

Когда приведенный выше код выполняется, он дает следующий результат —

Starting Thread-1
Starting Thread-2
Thread-1: Thu Mar 21 09:11:28 2013
Thread-1: Thu Mar 21 09:11:29 2013
Thread-1: Thu Mar 21 09:11:30 2013
Thread-2: Thu Mar 21 09:11:32 2013
Thread-2: Thu Mar 21 09:11:34 2013
Thread-2: Thu Mar 21 09:11:36 2013
Exiting Main Thread

Многопоточная приоритетная очередь

Модуль Queue позволяет вам создать новый объект очереди, который может содержать определенное количество элементов. Существуют следующие способы управления очередью:

  • get () — get () удаляет и возвращает элемент из очереди.

  • put () — Put добавляет элемент в очередь.

  • qsize () — qsize () возвращает количество элементов, которые в данный момент находятся в очереди.

  • empty () — empty () возвращает True, если очередь пуста; в противном случае Ложь.

  • full () — full () возвращает True, если очередь заполнена; в противном случае Ложь.

get () — get () удаляет и возвращает элемент из очереди.

put () — Put добавляет элемент в очередь.

qsize () — qsize () возвращает количество элементов, которые в данный момент находятся в очереди.

empty () — empty () возвращает True, если очередь пуста; в противном случае Ложь.

full () — full () возвращает True, если очередь заполнена; в противном случае Ложь.

пример

#!/usr/bin/python

import Queue
import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, q):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.q = q
   def run(self):
      print "Starting " + self.name
      process_data(self.name, self.q)
      print "Exiting " + self.name

def process_data(threadName, q):
   while not exitFlag:
      queueLock.acquire()
         if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print "%s processing %s" % (threadName, data)
         else:
            queueLock.release()
         time.sleep(1)

threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = Queue.Queue(10)
threads = []
threadID = 1

# Create new threads
for tName in threadList:
   thread = myThread(threadID, tName, workQueue)
   thread.start()
   threads.append(thread)
   threadID += 1

# Fill the queue
queueLock.acquire()
for word in nameList:
   workQueue.put(word)
queueLock.release()

# Wait for queue to empty
while not workQueue.empty():
   pass

# Notify threads it's time to exit
exitFlag = 1

# Wait for all threads to complete
for t in threads:
   t.join()
print "Exiting Main Thread"

Когда приведенный выше код выполняется, он дает следующий результат —

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread

Python — обработка XML

XML — это переносимый язык с открытым исходным кодом, который позволяет программистам разрабатывать приложения, которые могут быть прочитаны другими приложениями, независимо от операционной системы и / или языка разработки.

Что такое XML?

Расширяемый язык разметки (XML) — это язык разметки, очень похожий на HTML или SGML. Это рекомендуется Консорциумом World Wide Web и доступно в качестве открытого стандарта.

XML чрезвычайно полезен для отслеживания небольших и средних объемов данных, не требуя магистрали на основе SQL.

XML Parser Архитектуры и API

Стандартная библиотека Python предоставляет минимальный, но полезный набор интерфейсов для работы с XML.

Двумя наиболее основными и широко используемыми API для XML-данных являются интерфейсы SAX и DOM.

  • Простой API для XML (SAX) — здесь вы регистрируете обратные вызовы для интересующих событий, а затем позволяете анализатору проходить через документ. Это полезно, когда ваши документы большие или у вас есть ограничения памяти, он анализирует файл, когда читает его с диска, и весь файл никогда не сохраняется в памяти.

  • API Document Object Model (DOM) — это рекомендация Консорциума World Wide Web, в которой весь файл считывается в память и сохраняется в иерархической (основанной на дереве) форме для представления всех возможностей документа XML.

Простой API для XML (SAX) — здесь вы регистрируете обратные вызовы для интересующих событий, а затем позволяете анализатору проходить через документ. Это полезно, когда ваши документы большие или у вас есть ограничения памяти, он анализирует файл, когда читает его с диска, и весь файл никогда не сохраняется в памяти.

API Document Object Model (DOM) — это рекомендация Консорциума World Wide Web, в которой весь файл считывается в память и сохраняется в иерархической (основанной на дереве) форме для представления всех возможностей документа XML.

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

SAX доступен только для чтения, а DOM позволяет вносить изменения в файл XML. Поскольку эти два разных API буквально дополняют друг друга, нет никаких причин, по которым вы не можете использовать их оба для больших проектов.

Для всех наших примеров XML-кода, давайте использовать простой XML-файл movies.xml в качестве входных данных —

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

Разбор XML с помощью SAX API

SAX — это стандартный интерфейс для синтаксического анализа событий на основе событий. Для синтаксического анализа XML с помощью SAX обычно требуется создать собственный ContentHandler, создав подкласс xml.sax.ContentHandler.

Ваш ContentHandler обрабатывает определенные теги и атрибуты вашего вкуса (ов) XML. Объект ContentHandler предоставляет методы для обработки различных событий синтаксического анализа. Его собственный анализатор вызывает методы ContentHandler, так как он анализирует файл XML.

Методы startDocument и endDocument вызываются в начале и конце файла XML. Символы метода (текст) передаются символьные данные файла XML через текст параметра.

ContentHandler вызывается в начале и конце каждого элемента. Если синтаксический анализатор не находится в режиме пространства имен, вызываются методы startElement (тег, атрибуты) и endElement (тег) ; в противном случае вызываются соответствующие методы startElementNS и endElementNS . Здесь tag — это тег элемента, а attribute — это объект Attributes.

Вот другие важные методы, чтобы понять, прежде чем продолжить —

Метод make_parser

Следующий метод создает новый объект парсера и возвращает его. Созданный объект синтаксического анализа будет иметь первый тип синтаксического анализатора, найденный системой.

xml.sax.make_parser( [parser_list] )

Вот детали параметров —

  • parser_list — необязательный аргумент, состоящий из списка используемых парсеров, который должен реализовывать метод make_parser.

parser_list — необязательный аргумент, состоящий из списка используемых парсеров, который должен реализовывать метод make_parser.

Метод разбора

Следующий метод создает парсер SAX и использует его для разбора документа.

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

Вот детали параметров —

  • xmlfile — это имя файла XML для чтения.

  • contenthandler — это должен быть объект ContentHandler.

  • errorhandler — если указан, errorhandler должен быть объектом SAX ErrorHandler.

xmlfile — это имя файла XML для чтения.

contenthandler — это должен быть объект ContentHandler.

errorhandler — если указан, errorhandler должен быть объектом SAX ErrorHandler.

Метод parseString

Существует еще один метод для создания SAX-парсера и анализа указанной строки XML .

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

Вот детали параметров —

  • xmlstring — это имя строки XML для чтения.

  • contenthandler — это должен быть объект ContentHandler.

  • errorhandler — если указан, errorhandler должен быть объектом SAX ErrorHandler.

xmlstring — это имя строки XML для чтения.

contenthandler — это должен быть объект ContentHandler.

errorhandler — если указан, errorhandler должен быть объектом SAX ErrorHandler.

пример

#!/usr/bin/python

import xml.sax

class MovieHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # Call when an element starts
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title

   # Call when an elements ends
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type
      elif self.CurrentData == "format":
         print "Format:", self.format
      elif self.CurrentData == "year":
         print "Year:", self.year
      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Stars:", self.stars
      elif self.CurrentData == "description":
         print "Description:", self.description
      self.CurrentData = ""

   # Call when a character is read
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content
  
if ( __name__ == "__main__"):
   
   # create an XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # override the default ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

Это даст следующий результат —

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom

Для получения полной информации о документации SAX API, пожалуйста, обратитесь к стандартным API Python SAX .

Разбор XML с DOM API

Объектная модель документа («DOM») — это многоязычный API от World Wide Web Consortium (W3C) для доступа к XML-документам и их изменения.

DOM чрезвычайно полезен для приложений с произвольным доступом. SAX позволяет вам просматривать только один бит документа за раз. Если вы смотрите на один элемент SAX, у вас нет доступа к другому.

Вот самый простой способ быстро загрузить документ XML и создать объект minidom с помощью модуля xml.dom. Объект minidom предоставляет простой метод синтаксического анализа, который быстро создает дерево DOM из файла XML.

Пример фразы вызывает функцию parse (file [, parser]) объекта minidom для анализа файла XML, обозначенного файлом, в объект дерева DOM.

#!/usr/bin/python

from xml.dom.minidom import parse
import xml.dom.minidom

# Open XML document using minidom parser
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")

# Get all the movies in the collection
movies = collection.getElementsByTagName("movie")

# Print detail of each movie.
for movie in movies:
   print "*****Movie*****"
   if movie.hasAttribute("title"):
      print "Title: %s" % movie.getAttribute("title")

   type = movie.getElementsByTagName('type')[0]
   print "Type: %s" % type.childNodes[0].data
   format = movie.getElementsByTagName('format')[0]
   print "Format: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Description: %s" % description.childNodes[0].data

Это даст следующий результат —

Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom

Для получения полной информации о документации DOM API обратитесь к стандартным API-интерфейсам Python DOM .

Python — Программирование GUI (Tkinter)

Python предоставляет различные варианты для разработки графических пользовательских интерфейсов (GUI). Наиболее важные из них перечислены ниже.

  • Tkinter — Tkinter — это интерфейс Python для инструментария Tk GUI, поставляемый с Python. Мы бы посмотрели этот вариант в этой главе.

  • wxPython — это интерфейс Python с открытым исходным кодом для wxWindows http://wxpython.org .

  • JPython — JPython — это порт Python для Java, который предоставляет сценариям Python беспрепятственный доступ к библиотекам классов Java на локальном компьютере http://www.jython.org .

Tkinter — Tkinter — это интерфейс Python для инструментария Tk GUI, поставляемый с Python. Мы бы посмотрели этот вариант в этой главе.

wxPython — это интерфейс Python с открытым исходным кодом для wxWindows http://wxpython.org .

JPython — JPython — это порт Python для Java, который предоставляет сценариям Python беспрепятственный доступ к библиотекам классов Java на локальном компьютере http://www.jython.org .

Есть много других доступных интерфейсов, которые вы можете найти в сети.

Tkinter Программирование

Tkinter — это стандартная библиотека GUI для Python. Python в сочетании с Tkinter обеспечивает быстрый и простой способ создания приложений с графическим интерфейсом. Tkinter предоставляет мощный объектно-ориентированный интерфейс для инструментария Tk GUI.

Создание приложения с графическим интерфейсом с помощью Tkinter — простая задача. Все, что вам нужно сделать, это выполнить следующие шаги —

  • Импортируйте модуль Tkinter .

  • Создайте главное окно приложения с графическим интерфейсом.

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

  • Введите основной цикл событий, чтобы принять меры против каждого события, инициированного пользователем.

Импортируйте модуль Tkinter .

Создайте главное окно приложения с графическим интерфейсом.

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

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

пример

#!/usr/bin/python

import Tkinter
top = Tkinter.Tk()
# Code to add widgets will go here...
top.mainloop()

Это создаст следующее окно —

TK Window

Ткинтер Виджеты

Tkinter предоставляет различные элементы управления, такие как кнопки, метки и текстовые поля, используемые в приложении с графическим интерфейсом. Эти элементы управления обычно называются виджетами.

В настоящее время в Tkinter существует 15 типов виджетов. Мы представляем эти виджеты, а также краткое описание в следующей таблице —

Sr.No. Оператор и описание
1 кнопка

Виджет «Кнопка» используется для отображения кнопок в вашем приложении.

2 холст

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

3 Checkbutton

Виджет Checkbutton используется для отображения ряда опций в виде флажков. Пользователь может выбрать несколько вариантов одновременно.

4 запись

Виджет «Запись» используется для отображения однострочного текстового поля для принятия значений от пользователя.

5 Рамка

Виджет Frame используется как контейнерный виджет для организации других виджетов.

6 этикетка

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

7 Listbox

Виджет «Список» используется для предоставления пользователю списка параметров.

8 кнопку MENU

Виджет Menubutton используется для отображения меню в вашем приложении.

9 Меню

Виджет Меню используется для предоставления различных команд пользователю. Эти команды содержатся внутри Menubutton.

10 Сообщение

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

11 Переключатель

Виджет Radiobutton используется для отображения ряда параметров в качестве переключателей. Пользователь может выбрать только один вариант за один раз.

12 Масштаб

Виджет Масштаб используется для предоставления виджета слайдера.

13 Полоса прокрутки

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

14 Текст

Виджет Текст используется для отображения текста в несколько строк.

15 Верхний уровень

Виджет Toplevel используется для предоставления отдельного окна-контейнера.

16 со счётчиком

Виджет Spinbox — это вариант стандартного виджета Tkinter Entry, который можно использовать для выбора из фиксированного числа значений.

17 PanedWindow

PanedWindow — это контейнерный виджет, который может содержать любое количество панелей, расположенных горизонтально или вертикально.

18 LabelFrame

Метка — это простой контейнерный виджет. Его основная цель — выступать в качестве разделителя или контейнера для сложных оконных схем.

19 tkMessageBox

Этот модуль используется для отображения окон сообщений в ваших приложениях.

Виджет «Кнопка» используется для отображения кнопок в вашем приложении.

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

Виджет Checkbutton используется для отображения ряда опций в виде флажков. Пользователь может выбрать несколько вариантов одновременно.

Виджет «Запись» используется для отображения однострочного текстового поля для принятия значений от пользователя.

Виджет Frame используется как контейнерный виджет для организации других виджетов.

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

Виджет «Список» используется для предоставления пользователю списка параметров.

Виджет Menubutton используется для отображения меню в вашем приложении.

Виджет Меню используется для предоставления различных команд пользователю. Эти команды содержатся внутри Menubutton.

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

Виджет Radiobutton используется для отображения ряда параметров в качестве переключателей. Пользователь может выбрать только один вариант за один раз.

Виджет Масштаб используется для предоставления виджета слайдера.

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

Виджет Текст используется для отображения текста в несколько строк.

Виджет Toplevel используется для предоставления отдельного окна-контейнера.

Виджет Spinbox — это вариант стандартного виджета Tkinter Entry, который можно использовать для выбора из фиксированного числа значений.

PanedWindow — это контейнерный виджет, который может содержать любое количество панелей, расположенных горизонтально или вертикально.

Метка — это простой контейнерный виджет. Его основная цель — выступать в качестве разделителя или контейнера для сложных оконных схем.

Этот модуль используется для отображения окон сообщений в ваших приложениях.

Давайте изучим эти виджеты подробно —

Стандартные атрибуты

Давайте посмотрим, как определяются некоторые из их общих атрибутов, таких как размеры, цвета и шрифты.

Размеры

Цвета

шрифты

Якоря

Рельефные стили

Bitmaps

курсоры

Давайте изучим их кратко —

Управление геометрией

Все виджеты Tkinter имеют доступ к определенным методам управления геометрией, целью которых является организация виджетов по всей родительской области виджетов. Tkinter предоставляет следующие классы менеджера геометрии: pack, grid и place.

  • Метод pack () — этот менеджер геометрии организует виджеты в блоки перед размещением их в родительском виджете.

  • Метод grid () — этот менеджер геометрии организует виджеты в виде таблицы в родительском виджете.

  • Метод place () — этот менеджер геометрии организует виджеты, размещая их в определенной позиции в родительском виджете.

Метод pack () — этот менеджер геометрии организует виджеты в блоки перед размещением их в родительском виджете.

Метод grid () — этот менеджер геометрии организует виджеты в виде таблицы в родительском виджете.

Метод place () — этот менеджер геометрии организует виджеты, размещая их в определенной позиции в родительском виджете.

Давайте кратко изучим методы управления геометрией —

Python — Программирование расширений на C

Любой код, который вы пишете с использованием любого скомпилированного языка, такого как C, C ++ или Java, может быть интегрирован или импортирован в другой скрипт Python. Этот код считается «расширением».

Модуль расширения Python — это не более чем обычная библиотека Си. На машинах Unix эти библиотеки обычно заканчиваются на .so (для общего объекта). На компьютерах с Windows вы обычно видите .dll (для динамически связанной библиотеки).

Предварительные условия для написания расширений

Чтобы начать писать свое расширение, вам понадобятся заголовочные файлы Python.

  • На Unix-машинах это обычно требует установки пакета для разработчика, такого как python2.5-dev .

  • Пользователи Windows получают эти заголовки как часть пакета, когда они используют двоичный установщик Python.

На Unix-машинах это обычно требует установки пакета для разработчика, такого как python2.5-dev .

Пользователи Windows получают эти заголовки как часть пакета, когда они используют двоичный установщик Python.

Кроме того, предполагается, что у вас есть хорошие знания C или C ++ для написания любого расширения Python с использованием C-программирования.

Сначала посмотрите на расширение Python

Для первого взгляда на модуль расширения Python вам нужно сгруппировать код в четыре части —

  • Заголовочный файл Python.h .

  • Функции C, которые вы хотите использовать в качестве интерфейса вашего модуля.

  • Таблица, отображающая имена ваших функций, когда разработчики Python видят их для функций C внутри модуля расширения.

  • Функция инициализации.

Заголовочный файл Python.h .

Функции C, которые вы хотите использовать в качестве интерфейса вашего модуля.

Таблица, отображающая имена ваших функций, когда разработчики Python видят их для функций C внутри модуля расширения.

Функция инициализации.

Заголовочный файл Python.h

Вам необходимо включить заголовочный файл Python.h в исходный файл C, который дает вам доступ к внутреннему API Python, используемому для подключения вашего модуля к интерпретатору.

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

Функции C

Сигнатуры C-реализации ваших функций всегда принимают одну из следующих трех форм:

static PyObject *MyFunction( PyObject *self, PyObject *args );

static PyObject *MyFunctionWithKeywords(PyObject *self,
                                 PyObject *args,
                                 PyObject *kw);

static PyObject *MyFunctionWithNoArgs( PyObject *self );

Каждое из предыдущих объявлений возвращает объект Python. В Python нет такой вещи, как void- функция, как в C. Если вы не хотите, чтобы ваши функции возвращали значение, верните C-эквивалент значения None в Python. Заголовки Python определяют макрос Py_RETURN_NONE, который делает это для нас.

Имена ваших функций C могут быть любыми, поскольку они никогда не видны за пределами модуля расширения. Они определены как статическая функция.

Ваши функции C обычно называются путем объединения модуля Python и имен функций вместе, как показано здесь —

static PyObject * module_func (PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

Это функция Python, называемая func внутри модуля module . Вы будете помещать указатели на свои функции C в таблицу методов для модуля, который обычно идет следующим в вашем исходном коде.

Таблица сопоставления методов

Эта таблица методов представляет собой простой массив структур PyMethodDef. Эта структура выглядит примерно так —

struct PyMethodDef {
   char *ml_name;
   PyCFunction ml_meth;
   int ml_flags;
   char *ml_doc;
};

Вот описание членов этой структуры —

  • ml_name — это имя функции, которое представляет интерпретатор Python, когда оно используется в программах Python.

  • ml_meth — это должен быть адрес функции, которая имеет одну из сигнатур, описанных в предыдущем разделе.

  • ml_flags — сообщает интерпретатору, какая из трех сигнатур используется ml_meth.

    • Этот флаг обычно имеет значение METH_VARARGS.

    • Этот флаг может быть побитовым ИЛИ с METH_KEYWORDS, если вы хотите разрешить ключевые аргументы в вашей функции.

    • Это также может иметь значение METH_NOARGS, которое указывает, что вы не хотите принимать какие-либо аргументы.

  • ml_doc — это строка документации для функции, которая может быть NULL, если вы не хотите писать ее.

ml_name — это имя функции, которое представляет интерпретатор Python, когда оно используется в программах Python.

ml_meth — это должен быть адрес функции, которая имеет одну из сигнатур, описанных в предыдущем разделе.

ml_flags — сообщает интерпретатору, какая из трех сигнатур используется ml_meth.

Этот флаг обычно имеет значение METH_VARARGS.

Этот флаг может быть побитовым ИЛИ с METH_KEYWORDS, если вы хотите разрешить ключевые аргументы в вашей функции.

Это также может иметь значение METH_NOARGS, которое указывает, что вы не хотите принимать какие-либо аргументы.

ml_doc — это строка документации для функции, которая может быть NULL, если вы не хотите писать ее.

Эта таблица должна быть завершена с помощью стража, который состоит из значений NULL и 0 для соответствующих членов.

пример

Для описанной выше функции у нас есть следующая таблица отображения методов —

static PyMethodDef module _methods[] = {
   { " func ", (PyCFunction) module_func , METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

Функция инициализации

Последняя часть вашего модуля расширения — это функция инициализации. Эта функция вызывается интерпретатором Python при загрузке модуля. Требуется, чтобы функция называлась init Module , где Module — это имя модуля.

Функция инициализации должна быть экспортирована из библиотеки, которую вы будете собирать. Заголовки Python определяют PyMODINIT_FUNC, чтобы включить соответствующие заклинания для того, чтобы это произошло для конкретной среды, в которой мы компилируем. Все, что вам нужно сделать, это использовать его при определении функции.

Ваша функция инициализации C обычно имеет следующую общую структуру:

PyMODINIT_FUNC init Module () {
   Py_InitModule3( func , module _methods, "docstring...");
}

Вот описание функции Py_InitModule3

  • func — это функция для экспорта.

  • module _methods — это имя таблицы сопоставления, определенное выше.

  • docstring — это комментарий, который вы хотите оставить в своем расширении.

func — это функция для экспорта.

module _methods — это имя таблицы сопоставления, определенное выше.

docstring — это комментарий, который вы хотите оставить в своем расширении.

Соединение всего этого выглядит следующим образом —

#include <Python.h>

static PyObject * module_func (PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

static PyMethodDef module _methods[] = {
   { " func ", (PyCFunction) module_func , METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

PyMODINIT_FUNC init Module () {
   Py_InitModule3( func , module _methods, "docstring...");
}

пример

Простой пример, который использует все вышеупомянутые понятия —

#include <Python.h>

static PyObject* helloworld(PyObject* self) {
   return Py_BuildValue("s", "Hello, Python extensions!!");
}

static char helloworld_docs[] =
   "helloworld( ): Any message you want to put here!!\n";

static PyMethodDef helloworld_funcs[] = {
   {"helloworld", (PyCFunction)helloworld, 
      METH_NOARGS, helloworld_docs},
      {NULL}
};

void inithelloworld(void) {
   Py_InitModule3("helloworld", helloworld_funcs,
                  "Extension module example!");
}

Здесь функция Py_BuildValue используется для создания значения Python. Сохраните приведенный выше код в файле hello.c Мы увидим, как скомпилировать и установить этот модуль для вызова из скрипта Python.

Сборка и установка расширений

Пакет distutils позволяет очень легко распространять модули Python, как чистый Python, так и модули расширения, стандартным способом. Модули распространяются в виде исходного кода, собираются и устанавливаются с помощью сценария установки, обычно называемого setup.py, следующим образом.

Для вышеуказанного модуля вам необходимо подготовить следующий скрипт setup.py —

from distutils.core import setup, Extension
setup(name='helloworld', version='1.0',  \
      ext_modules=[Extension('helloworld', ['hello.c'])])

Теперь используйте следующую команду, которая выполнила бы все необходимые шаги компиляции и компоновки, с правильными командами и флагами компилятора и компоновщика, и скопировала полученную динамическую библиотеку в соответствующий каталог —

$ python setup.py install

В системах на основе Unix вам, скорее всего, нужно будет запустить эту команду от имени пользователя root, чтобы иметь права на запись в каталог site-packages. Обычно это не проблема для Windows.

Импорт расширений

Установив расширение, вы сможете импортировать и вызывать это расширение в своем скрипте Python следующим образом:

#!/usr/bin/python
import helloworld

print helloworld.helloworld()

Это даст следующий результат —

Hello, Python extensions!!

Передача параметров функции

Поскольку вы, скорее всего, захотите определить функции, которые принимают аргументы, вы можете использовать одну из других сигнатур для ваших функций Си. Например, следующая функция, которая принимает некоторое количество параметров, будет определена так:

static PyObject * module_func (PyObject *self, PyObject *args) {
   /* Parse args and do something interesting here. */
   Py_RETURN_NONE;
}

Таблица методов, содержащая запись для новой функции, будет выглядеть так:

static PyMethodDef module _methods[] = {
   { " func ", (PyCFunction) module_func , METH_NOARGS, NULL },
   { " func ", module_func , METH_VARARGS, NULL },
   { NULL, NULL, 0, NULL }
};

Вы можете использовать функцию API PyArg_ParseTuple для извлечения аргументов из одного указателя PyObject, переданного в вашу функцию C.

Первый аргумент PyArg_ParseTuple — аргумент args. Это объект, который вы будете анализировать . Второй аргумент — это строка формата, описывающая аргументы в ожидаемом порядке. Каждый аргумент представлен одним или несколькими символами в строке формата следующим образом.

static PyObject * module_func (PyObject *self, PyObject *args) {
   int i;
   double d;
   char *s;

   if (!PyArg_ParseTuple(args, "ids", &i, &d, &s)) {
      return NULL;
   }
   
   /* Do something interesting here. */
   Py_RETURN_NONE;
}

Компилируя новую версию вашего модуля и импортируя ее, вы можете вызывать новую функцию с любым количеством аргументов любого типа —

module.func(1, s="three", d=2.0)
module.func(i=1, d=2.0, s="three")
module.func(s="three", d=2.0, i=1)

Вы можете, вероятно, придумать еще больше вариантов.

Функция PyArg_ParseTuple

Вот стандартная подпись для функции PyArg_ParseTuple

int PyArg_ParseTuple(PyObject* tuple,char* format,...)

Эта функция возвращает 0 для ошибок и значение, не равное 0 для успеха. кортеж — это PyObject *, который был вторым аргументом функции C. Здесь формат представляет собой строку C, которая описывает обязательные и необязательные аргументы.

Вот список кодов формата для функции PyArg_ParseTuple

Код Тип C Имея в виду
с голец Строка Python длиной 1 становится символом C.
d двойной Поплавок Python становится двойным Си.
е поплавок Поплавок Python становится поплавком Си.
я ИНТ Python int становится C int.
L долго Int Python становится C длиной.
L долго долго Python int становится C long long
О PyObject * Получает ненулевую заимствованную ссылку на аргумент Python.
s символ * Строка Python без встроенных нулей в C char *.
s # символ * + INT Любая строка Python для адреса и длины C.
т # символ * + INT Доступный только для чтения односегментный буфер для адреса C и длины.
U Py_UNICODE * Python Unicode без встроенных нулей в C.
U # Py_UNICODE * + INT Любой Python Unicode C адрес и длина.
ш # символ * + INT Чтение / запись односегментного буфера на C адрес и длину.
Z символ * Как и s, также принимает None (устанавливает C char * в NULL).
г # символ * + INT Как и s #, также принимает None (устанавливает C char * в NULL).
(…) согласно … Последовательность Python рассматривается как один аргумент для каждого элемента.
| Следующие аргументы являются необязательными.
: Формат конца, а затем имя функции для сообщений об ошибках.
; Конец формата с последующим полным текстом сообщения об ошибке.

Возвращаемые значения

Py_BuildValue принимает строку формата, очень похожую на PyArg_ParseTuple . Вместо того, чтобы передавать адреса значений, которые вы строите, вы передаете фактические значения. Вот пример, показывающий, как реализовать функцию добавления —

static PyObject *foo_add(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("i", a + b);
}

Вот как это будет выглядеть, если реализовано в Python —

def add(a, b):
   return (a + b)

Вы можете возвратить два значения из вашей функции следующим образом, это будет получено с помощью списка в Python.

static PyObject *foo_add_subtract(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("ii", a + b, a - b);
}

Вот как это будет выглядеть, если реализовано в Python —

def add_subtract(a, b):
   return (a + b, a - b)

Функция Py_BuildValue

Вот стандартная подпись для функции Py_BuildValue

PyObject* Py_BuildValue(char* format,...)

Здесь формат представляет собой строку C, которая описывает объект Python для построения. Следующие аргументы Py_BuildValue являются значениями C, из которых строится результат. Результат PyObject * является новой ссылкой.

В следующей таблице перечислены наиболее часто используемые строки кода, из которых ноль или более объединяются в строковый формат.

Код Тип C Имея в виду
с голец AC char становится строкой Python длиной 1.
d двойной AC double становится поплавком Python.
е поплавок AC float становится Python float.
я ИНТ AC int становится Python int.
L долго AC долго становится Python Int.
N PyObject * Пропускает объект Python и крадет ссылку.
О PyObject * Проходит объект Python и INCREFs его как обычно.
O & конвертировать + аннулируются * Произвольное преобразование
s символ * C 0 заканчивается символом * в строке Python или NULL для None.
s # символ * + INT C char * и длина до строки Python или NULL до None.
U Py_UNICODE * C-широкая строка с нулевым символом в конце для Python Unicode или NULL для None.
U # Py_UNICODE * + INT C-строка и длина в Python Unicode или NULL в None.
ш # символ * + INT Чтение / запись односегментного буфера на C адрес и длину.
Z символ * Как и s, также принимает None (устанавливает C char * в NULL).
г # символ * + INT Как и s #, также принимает None (устанавливает C char * в NULL).
(…) согласно … Создает кортеж Python из значений C.
[…] согласно … Создает список Python из значений C.
{…} согласно … Создает словарь Python из значений C, чередующихся ключей и значений.

Код {…} создает словари из четного числа значений C, поочередно ключей и значений. Например, Py_BuildValue («{issi}», 23, «zig», «zag», 42) возвращает словарь, подобный Python {23: ‘zig’, ‘zag’: 42}.