Учебники

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

Что нового в Python 3?

В Python 3.x представлены некоторые несовместимые с Python 2 ключевые слова и функции, которые можно импортировать с помощью встроенного модуля __future__ в Python 2. Рекомендуется использовать импорт __future__, если вы планируете поддержку Python 3.x для своего кода.

Например, если нам нужно поведение целочисленного деления Python 3.x в Python 2, добавьте следующий оператор импорта.

from __future__ import division

Функция печати

Наиболее заметное и наиболее известное изменение в Python 3 — это использование функции печати . Использование круглых скобок () с функцией печати теперь является обязательным. Это было необязательно в Python 2.

print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()

Функция print () по умолчанию вставляет новую строку в конце. В Python 2 это можно подавить, поставив ‘,’ в конце. В Python 3 «end = »» добавляет пробел вместо новой строки.

print x,           # Trailing comma suppresses newline in Python 2
print(x, end=" ")  # Appends a space instead of a newline in Python 3

Чтение ввода с клавиатуры

Python 2 имеет две версии функций ввода: input () и raw_input () . Функция input () обрабатывает полученные данные как строку, если они включены в кавычки » или «», в противном случае данные обрабатываются как число.

В Python 3 функция raw_input () устарела. Далее, полученные данные всегда обрабатываются как строки.

In Python 2

>>> x = input('something:') 
something:10 #entered data is treated as number
>>> x
10

>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'

>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'

>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"

In Python 3

>>> x = input("something:")
something:10
>>> x
'10'

>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"

>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in 
  <module>
   x = raw_input("something:")
NameError: name 'raw_input' is not defined

Целочисленное деление

В Python 2 результат деления двух целых чисел округляется до ближайшего целого числа. В результате 3/2 покажет 1. Чтобы получить деление с плавающей запятой, числитель или знаменатель должны быть явно использованы в качестве числа с плавающей запятой. Следовательно, либо 3,0 / 2 или 3 / 2,0 или 3,0 / 2,0 приведет к 1,5

Python 3 оценивает 3/2 как 1,5 по умолчанию, что более интуитивно понятно для новых программистов.

Unicode Представление

Python 2 требует, чтобы вы пометили строку с помощью au, если вы хотите сохранить ее как Unicode.

По умолчанию Python 3 хранит строки как Unicode. У нас есть строки Unicode (utf-8) и 2-байтовые классы: байтовые и байтовые массивы.

Функция xrange () удалена

В Python 2 range () возвращает список, а xrange () возвращает объект, который будет генерировать элементы в диапазоне только при необходимости, экономя память.

В Python 3 функция range () удалена, а xrange () была переименована в range (). Кроме того, объект range () поддерживает нарезку в Python 3.2 и более поздних версиях.

поднять исключение

Python 2 принимает обе нотации, «старый» и «новый» синтаксис; Python 3 вызывает SyntaxError, если мы не заключаем аргумент исключения в круглые скобки.

raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3

Аргументы в исключениях

В Python 3 аргументы исключения должны быть объявлены с ключевым словом as.

except Myerror, err: # In Python2
except Myerror as err: #In Python 3

Функция next () и метод .next ()

В Python 2 допускается использование next () в качестве метода объекта генератора. В Python 2 также принята функция next () для перебора объекта-генератора. В Python 3, однако, next (0 как метод генератора прекращается и вызывает AttributeError.

gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3

2to3 Утилита

Наряду с интерпретатором Python 3 скрипт 2to3.py обычно устанавливается в папку tools / scripts. Он читает исходный код Python 2.x и применяет серию исправлений, чтобы преобразовать его в действительный код Python 3.x.

Here is a sample Python 2 code (area.py):

def area(x,y = 3.14): 
   a = y*x*x
   print a
   return a

a = area(10)
print "area",a

To convert into Python 3 version:

$2to3 -w area.py

Converted code :

def area(x,y = 3.14): # formal parameters
   a = y*x*x
   print (a)
   return a

a = area(10)
print("area",a)

Python 3 — Обзор

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 1.0 был выпущен в ноябре 1994 года. В 2000 году был выпущен Python 2.0. Python 2.7.11 — это последняя версия Python 2.

  • Между тем, Python 3.0 был выпущен в 2008 году. Python 3 не имеет обратной совместимости с Python 2. Акцент в Python 3 был сделан на удалении дублирующихся программных конструкций и модулей, так что «должен быть один — и предпочтительно только один — очевидный способ сделать это «. Python 3.5.1 является последней версией Python 3.

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

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

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

Python 1.0 был выпущен в ноябре 1994 года. В 2000 году был выпущен Python 2.0. Python 2.7.11 — это последняя версия Python 2.

Между тем, Python 3.0 был выпущен в 2008 году. Python 3 не имеет обратной совместимости с Python 2. Акцент в Python 3 был сделан на удалении дублирующихся программных конструкций и модулей, так что «должен быть один — и предпочтительно только один — очевидный способ сделать это «. Python 3.5.1 является последней версией Python 3.

Особенности 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 3 — Настройка среды

Python 3 доступен для Windows, Mac OS и большинства разновидностей операционной системы Linux. Несмотря на то, что Python 2 доступен для многих других ОС, поддержка Python 3 либо не была предоставлена ​​для них, либо была прекращена.

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

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

Получение Python

Платформа Windows

Двоичные файлы последней версии Python 3 (Python 3.5.1) доступны на этой странице загрузки.

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

  • Встраиваемый zip-файл Windows x86-64
  • Установщик исполняемого файла Windows x86-64
  • Windows x86-64 веб-установщик
  • Встраиваемый zip-файл Windows x86
  • Установщик исполняемого файла Windows x86
  • Сетевой установщик Windows x86

Примечание. Для установки Python 3.5.1 необходимо установить минимальные требования к ОС Windows 7 с пакетом обновления 1 (SP1). Для версий 3.0 до 3.4.x Windows XP является приемлемой.

Платформа Linux

Различные версии Linux используют разные менеджеры пакетов для установки новых пакетов.

В Ubuntu Linux Python 3 устанавливается с помощью следующей команды из терминала.

$sudo apt-get install python3-minimal

Установка из источника

Загрузите архив с исходным кодом Gzipped с URL-адреса загрузки Python — https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz

Extract the tarball
tar xvfz Python-3.5.1.tgz
Configure and Install:
cd Python-3.5.1
./configure --prefix = /opt/python3.5.1
make  
sudo make install

Mac OS

Загрузите установщики Mac OS с этого URL — https://www.python.org/downloads/mac-osx/

  • Установщик Mac OS X 64-bit / 32-bit — python-3.5.1-macosx10.6.pkg
  • Установщик 32-битной версии Mac OS X i386 / PPC — python-3.5.1-macosx10.5.pkg

Дважды щелкните этот файл пакета и следуйте инструкциям мастера для установки.

Самый актуальный и актуальный исходный код, двоичные файлы, документация, новости и т. Д. Доступны на официальном сайте Python —

Официальный сайт Pythonhttps://www.python.org/

Вы можете скачать документацию по Python со следующего сайта. Документация доступна в форматах HTML, PDF и PostScript.

Веб-сайт документации Pythonwww.python.org/doc/

Настройка PATH

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

Важные особенности —

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

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

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

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

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

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

Установка пути в Unix / Linux

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

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

  • В оболочке bash (Linux) — введите export PYTHONPATH = / usr / local / bin / python3.4 и нажмите Enter.

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

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

В оболочке bash (Linux) — введите export PYTHONPATH = / usr / local / bin / python3.4 и нажмите Enter.

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

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

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

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

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

В командной строке введите путь% 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$ python

Python 3.3.2 (default, Dec 10 2013, 11:35:01)
[GCC 4.6.3] on Linux
Type "help", "copyright", "credits", or "license" for more information.
>>>

On Windows:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>

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

>>> print ("Hello, Python!")

Если вы используете старую версию Python (Python 2.x), использование скобок в качестве функции inprint необязательно. Это дает следующий результат —

Hello, Python!

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

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

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

Live Demo

print ("Hello, Python!")

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

В линуксе

$ python test.py 

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

 Привет, Питон!

На винде

C:\Python34>Python test.py

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

 Привет, Питон!

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

Live Demo

#!/usr/bin/python3
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/python3

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 = 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/python3

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

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

Hello, Python!

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

name = "Madisetti" # This is again comment

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

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

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

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

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

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

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

#!/usr/bin/python3

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 3 — Типы переменных

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

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

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

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

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

Live Demo

#!/usr/bin/python3

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 (целые числа со знаком)
  • float (реальные значения с плавающей точкой)
  • комплекс (комплексные числа)

Все целые числа в Python3 представлены как длинные целые числа. Следовательно, не существует отдельного типа чисел, как долго.

Примеры

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

ИНТ поплавок сложный
10 0.0 3.14j
100 15,20 45.j
-786 -21,9 9.322e-36j
080 32,3 + e18 .876j
-0490 -90. -.6545 + 0J
-0x260 -32.54e100 3e + 26J
0x69 70,2-E12 4.53e-7j

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

Python Strings

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

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

Live Demo

#!/usr/bin/python3

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/python3

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.200000000000003]
abcd
[786, 2.23]
[2.23, 'john', 70.200000000000003]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john']

Python Tuples

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

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

Live Demo

#!/usr/bin/python3

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

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

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

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

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

#!/usr/bin/python3

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/python3

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
{'name': 'john', 'dept': 'sales', 'code': 6734}
dict_keys(['name', 'dept', 'code'])
dict_values(['john', 'sales', 6734])

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

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

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

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

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

int (x [, base])

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

2

Поплавок (х)

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

3

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

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

4

ул (х)

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

5

магнезии (х)

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

6

Eval (ул)

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

7

набор (ы)

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

8

(ена)

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

9

набор (ы)

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

10

ДИКТ (д)

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

11

frozenset (ы)

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

12

CHR (х)

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

13

unichr (х)

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

14

Ord (х)

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

15

гекс (х)

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

16

Октябрь (х)

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

int (x [, base])

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

Поплавок (х)

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

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

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

ул (х)

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

магнезии (х)

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

Eval (ул)

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

набор (ы)

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

(ена)

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

набор (ы)

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

ДИКТ (д)

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

frozenset (ы)

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

CHR (х)

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

unichr (х)

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

Ord (х)

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

гекс (х)

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

Октябрь (х)

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

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

Операторы — это конструкции, которые могут манипулировать значением операндов. Рассмотрим выражение 4 + 5 = 9. Здесь 4 и 5 называются операндами, а + называется оператором.

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

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

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

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

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

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

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

оператор Описание пример
+ Дополнение Добавляет значения по обе стороны от оператора. а + б = 31
— вычитание Вычитает правый операнд из левого операнда. а — б = -11
* Умножение Умножает значения по обе стороны от оператора а * б = 210
/ Отдел Делит левый операнд на правый операнд б / а = 2,1
% Модуль Делит левый операнд на правый и возвращает остаток б% а = 1
** Экспонент Выполняет экспоненциальный (силовой) расчет по операторам а ** б = 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 bin () может использоваться для получения двоичного представления целого числа.

Следующие побитовые операторы поддерживаются языком 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 содержит значение True, а переменная b содержит значение False, тогда —

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

оператор Описание пример
и логическое И Если оба операнда имеют значение 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 3 — принятие решений

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

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

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

Принятие решения

Язык программирования Python принимает любые ненулевые и ненулевые значения как TRUE, а любые нулевые или нулевые значения как FALSE.

Язык программирования 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/python3

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

Выход

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

Value of expression is 100
Good bye!

Python 3 — петли

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

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

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

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

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

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

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

2 для цикла

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

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

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

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

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

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

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

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

Python поддерживает следующие операторы управления.

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

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

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

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

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

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

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

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

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

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

Итератор и Генератор

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

Объекты String, List или Tuple могут использоваться для создания итератора.

list = [1,2,3,4]
it = iter(list) # this builds an iterator object
print (next(it)) #prints next available element in iterator
Iterator object can be traversed using regular for statement
!usr/bin/python3
for x in it:
   print (x, end=" ")
or using next() function
while True:
   try:
      print (next(it))
   except StopIteration:
      sys.exit() #you have to import sys module for this

Генератор — это функция, которая производит или возвращает последовательность значений с использованием метода yield.

Когда вызывается функция генератора, она возвращает объект генератора, даже не начав выполнение функции. Когда метод next () вызывается в первый раз, функция начинает выполняться, пока не достигнет оператора yield, который возвращает полученное значение. Выход отслеживает, т.е. запоминает последнее выполнение, а второй вызов next () продолжается с предыдущего значения.

пример

В следующем примере определяется генератор, который генерирует итератор для всех чисел Фибоначчи.

#!usr/bin/python3

import sys
def fibonacci(n): #generator function
   a, b, counter = 0, 1, 0
   while True:
      if (counter > n): 
         return
      yield a
      a, b = b, a + b
      counter += 1
f = fibonacci(5) #f is iterator object

while True:
   try:
      print (next(f), end=" ")
   except StopIteration:
      sys.exit()

Python 3 — Числа

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

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

var1 = 1
var2 = 10

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

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

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

del var
del var_a, var_b

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

  • int (целые числа со знаком ) — их часто называют просто целыми числами или целыми числами . Это положительные или отрицательные целые числа без десятичной точки. Целые числа в Python 3 имеют неограниченный размер. Python 2 имеет два целочисленных типа — int и long. В Python 3 больше нет « длинного целого ».

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

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

int (целые числа со знаком ) — их часто называют просто целыми числами или целыми числами . Это положительные или отрицательные целые числа без десятичной точки. Целые числа в Python 3 имеют неограниченный размер. Python 2 имеет два целочисленных типа — int и long. В Python 3 больше нет « длинного целого ».

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

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

Можно представить целое число в шестнадцатеричной или восьмеричной форме

>>> number = 0xA0F #Hexa-decimal
>>> number
2575

>>> number = 0o37 #Octal
>>> number
31

Примеры

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

ИНТ поплавок сложный
10 0.0 3.14j
100 15,20 45.j
-786 -21,9 9.322e-36j
080 32,3 + e18 .876j
-0490 -90. -.6545 + 0J
-0 × 260 -32.54e100 3e + 26J
0 × 69 70,2-E12 4.53e-7j

Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей точкой, обозначаемых 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 (х)

Верхний предел x: наименьшее целое число не меньше x.

3

см (х, у)

-1, если x <y, 0, если x == y, или 1, если x> y. Устаревший в Python 3. Вместо этого используйте return (x> y) — (x <y) .

4 ехр (х)

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

5 FABS (х)

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

6 пол (х)

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

7 войти (х)

Натуральный логарифм x для x> 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 (х)

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

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

Верхний предел x: наименьшее целое число не меньше x.

см (х, у)

-1, если x <y, 0, если x == y, или 1, если x> y. Устаревший в Python 3. Вместо этого используйте return (x> y) — (x <y) .

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

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

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

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

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

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

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

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

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

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

Квадратный корень из x для x> 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 3 — Струны

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

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

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

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

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

Live Demo

#!/usr/bin/python3

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/python3

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/python3

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

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

My name is Zara and weight is 21 kg!

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

Sr.No. Формат символа и преобразования
1

% с

персонаж

2

% s

преобразование строки через str () перед форматированием

3

знаковое десятичное целое

4

% d

знаковое десятичное целое

5

% U

целое число без знака

6

% о

восьмеричное целое

7

%Икс

шестнадцатеричное целое (строчные буквы)

8

%ИКС

шестнадцатеричное целое (заглавные буквы)

9

% е

экспоненциальная запись (строчными буквами «е»)

10

% E

экспоненциальная запись (с верхним регистром ‘E’)

11

% е

вещественное число с плавающей точкой

12

короче% f и% e

13

короче% f и% E

% с

персонаж

% s

преобразование строки через str () перед форматированием

знаковое десятичное целое

% d

знаковое десятичное целое

% U

целое число без знака

% о

восьмеричное целое

%Икс

шестнадцатеричное целое (строчные буквы)

%ИКС

шестнадцатеричное целое (заглавные буквы)

% е

экспоненциальная запись (строчными буквами «е»)

% E

экспоненциальная запись (с верхним регистром ‘E’)

% е

вещественное число с плавающей точкой

короче% f и% e

короче% f и% E

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

Sr.No. Символ & Функциональность
1

*

аргумент указывает ширину или точность

2

левое оправдание

3

+

показать знак

4

<зр>

оставьте пробел перед положительным числом

5

#

добавьте восьмеричный начальный ноль (‘0’) или шестнадцатеричный ведущий ‘0x’ или ‘0X’, в зависимости от того, были ли использованы ‘x’ или ‘X’.

6

0

накладка слева с нулями (вместо пробелов)

7

%

«%%» оставляет вас с одним литералом «%»

8

(вар)

переменная сопоставления (словарные аргументы)

9

Миннесота

m — минимальная общая ширина, а n — количество цифр, отображаемых после десятичной точки (если применимо).

*

аргумент указывает ширину или точность

левое оправдание

+

показать знак

<зр>

оставьте пробел перед положительным числом

#

добавьте восьмеричный начальный ноль (‘0’) или шестнадцатеричный ведущий ‘0x’ или ‘0X’, в зависимости от того, были ли использованы ‘x’ или ‘X’.

0

накладка слева с нулями (вместо пробелов)

%

«%%» оставляет вас с одним литералом «%»

(вар)

переменная сопоставления (словарные аргументы)

Миннесота

m — минимальная общая ширина, а n — количество цифр, отображаемых после десятичной точки (если применимо).

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

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

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

Live Demo

#!/usr/bin/python3

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/python3

print ('C:\\nowhere')

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

C:\nowhere

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

Live Demo

#!/usr/bin/python3

print (r'C:\\nowhere')

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

C:\\nowhere

Unicode String

В Python 3 все строки представлены в Unicode. В Python 2 хранятся внутренне как 8-битный ASCII, поэтому требуется сделать ‘u’, чтобы сделать его Unicode. Это больше не нужно сейчас.

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

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 вкладка расширения (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 3 — Списки

Основная структура данных в 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/python3

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/python3

list = ['physics', 'chemistry', 1997, 2000]
print ("Value available at index 2 : ", list[2])

list[2] = 2001
print ("New value available at index 2 : ", list[2])

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

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

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

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

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

Live Demo

#!/usr/bin/python3

list = ['physics', 'chemistry', 1997, 2000]
print (list)

del list[2]
print ("After deleting value at index 2 : ", list)

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

['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] Правда членство
для x в [1,2,3]: print (x, end = ») 1 2 3 итерация

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

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

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

L = ['C++'', 'Java', 'Python']

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

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

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

Sr.No. Описание функции
1 cmp (list1, list2)

Больше не доступен в Python 3.

2 Len (список)

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

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

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

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

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

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

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

Больше не доступен в Python 3.

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

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

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

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

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 = list [-1])

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

7 list.remove (OBJ)

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

8 list.reverse ()

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

9 list.sort ([FUNC])

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

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

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

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

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

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

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

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

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

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

Python 3 — кортежи

Кортеж — это последовательность неизменяемых объектов 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/python3

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/python3

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 . Например —

#!/usr/bin/python3

tup = ('physics', 'chemistry', 1997, 2000);

print (tup)
del tup;
print ("After deleting tup : ")
print (tup)

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

Примечание. Возникает исключение. Это потому, что после del 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 в (1,2,3): print (x, end = ») 1 2 3 итерация

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

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

T=('C++', 'Java', 'Python')

Выражение Python Результаты Описание
T [2] ‘Python’ Смещения начинаются с нуля
Т [-2] ‘Джава’ Отрицательный: считать справа
T [1:] («Java», «Python») Нарезка выборок разделов

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

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

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

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

Sr.No. Описание функции
1 cmp (tuple1, tuple2)

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

2 Len (кортеж)

Дает общую длину кортежа.

3 макс (кортеж)

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

4 мин (кортеж)

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

5 кортеж (сл)

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

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

Дает общую длину кортежа.

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

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

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

Python 3 — словарь

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

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

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

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

Live Demo

#!/usr/bin/python3

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/python3

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
print ("dict['Alice']: ", dict['Alice'])

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

dict['Zara']:
Traceback (most recent call last):
   File "test.py", line 4, in <module>
      print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'

Обновление словаря

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

Live Demo

#!/usr/bin/python3

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/python3

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/python3

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print ("dict['Name']: ", dict['Name'])

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

dict['Name']:  Manni

(б) Ключи должны быть неизменными. Это означает, что вы можете использовать строки, числа или кортежи в качестве ключей словаря, но что-то вроде [‘key’] не допускается. Ниже приведен простой пример —

Live Demo

#!/usr/bin/python3

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: list objects are unhashable

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

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

Sr.No. Описание функции
1 cmp (dict1, dict2)

Больше не доступен в Python 3.

2 Len (ДИКТ)

Дает общую длину словаря. Это будет равно количеству элементов в словаре.

3 ул (ДИКТ)

Создает печатное строковое представление словаря

4 Тип (переменная)

Возвращает тип переданной переменной. Если переданная переменная является словарем, то она возвращает тип словаря.

Больше не доступен в Python 3.

Дает общую длину словаря. Это будет равно количеству элементов в словаре.

Создает печатное строковое представление словаря

Возвращает тип переданной переменной. Если переданная переменная является словарем, то она возвращает тип словаря.

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

Sr.No. Метод и описание
1 dict.clear ()

Удаляет все элементы словаря dict

2 dict.copy ()

Возвращает мелкую копию словаря dict

3 dict.fromkeys ()

Создайте новый словарь с ключами из seq и значениями, установленными в значение .

4 dict.get (ключ, по умолчанию = Нет)

Для ключа key возвращает значение или значение по умолчанию, если ключ отсутствует в словаре

5 dict.has_key (ключ)

Удалено, используйте вместо операции.

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 возвращает значение или значение по умолчанию, если ключ отсутствует в словаре

Удалено, используйте вместо операции.

Возвращает список пар кортежей dict (ключ, значение)

Возвращает список ключей словаря dict

Аналогичен get (), но установит dict [ключ] = по умолчанию, если ключ еще не в dict

Добавляет пары словарь-значение dict2 в dict

Возвращает список значений словаря dict

Python 3 — дата и время

Программа Python может обрабатывать дату и время несколькими способами. Преобразование между форматами даты — обычная задача для компьютеров. Модули времени и календаря Python помогают отслеживать дату и время.

Что такое тик?

Временные интервалы — это числа с плавающей точкой в ​​секундах. Особые моменты времени выражаются в секундах с 12:00 утра, 1 января 1970 года (эпоха).

В Python есть популярный модуль времени, который предоставляет функции для работы со временем и для преобразования между представлениями. Функция time.time () возвращает текущее системное время в тиках с 12:00, 1 января 1970 года (эпоха).

пример

Live Demo

#!/usr/bin/python3
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: 1455508609.34375

Арифметика даты легко сделать с помощью галочек. Однако даты до эпохи не могут быть представлены в этой форме. Даты в далеком будущем также не могут быть представлены таким образом — точка отсечения наступает где-то в 2038 году для UNIX и Windows.

Что такое TimeTuple?

Многие из функций времени Python обрабатывают время как кортеж из 9 чисел, как показано ниже —

Индекс поле Ценности
0 4-значный год 2016
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

Например —

Live Demo

import time

print (time.localtime());

Это приведет к следующему результату:

time.struct_time(tm_year = 2016, tm_mon = 2, tm_mday = 15, tm_hour = 9, 
   tm_min = 29, tm_sec = 2, tm_wday = 0, tm_yday = 46, tm_isdst = 0)

Вышеуказанный кортеж эквивалентен структуре struct_time . Эта структура имеет следующие атрибуты —

Индекс Атрибуты Ценности
0 tm_year 2016
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/python3
import time

localtime = time.localtime(time.time())
print ("Local current time :", localtime)

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

Local current time : time.struct_time(tm_year = 2016, tm_mon = 2, tm_mday = 15, 
   tm_hour = 9, tm_min = 29, tm_sec = 2, tm_wday = 0, tm_yday = 46, tm_isdst = 0)

Получение отформатированного времени

Вы можете отформатировать любое время в соответствии с вашими требованиями, но простой способ получить время в удобочитаемом формате — это asctime ()

Live Demo Live Demo

#!/usr/bin/python3
import time

localtime = time.asctime( time.localtime(time.time()) )
print ("Local current time :", localtime)

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

Local current time : Mon Feb 15 09:34:03 2016

Получение календаря на месяц

Модуль календаря предоставляет широкий спектр методов для игры с годовыми и ежемесячными календарями. Здесь мы печатаем календарь на данный месяц (январь 2008) —

Live Demo

#!/usr/bin/python3
import calendar

cal = calendar.month(2016, 2)
print ("Here is the calendar:")
print (cal)

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

Here is the calendar:
   February 2016
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

Модуль времени

В 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 (год, w = 2, l = 1, c = 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 (год, месяц, w = 2, l = 1)

Возвращает многострочную строку с календарем на месяц месяц год, одну строку в неделю плюс две строки заголовка. w — ширина в символах каждой даты; каждая строка имеет длину 7 * w + 6. l — количество строк за каждую неделю.

6

calendar.monthcalendar (год, месяц)

Возвращает список списков целых. Каждый подсписок обозначает неделю. Дни вне месяца, месяца, года и года установлены на 0; дни в месяце устанавливаются на их день месяца, 1 и выше.

7

calendar.monthrange (год, месяц)

Возвращает два целых числа. Первый — это код дня недели для первого дня месяца месяца в году; второй — количество дней в месяце. Коды дня недели: от 0 (понедельник) до 6 (воскресенье); номера месяцев от 1 до 12.

8

calendar.prcal (год, w = 2, l = 1, c = 6)

Как печатать calendar.calendar (год, ш, л, в).

9

calendar.prmonth (год, месяц, w = 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 (год, w = 2, l = 1, c = 6)

Возвращает многострочную строку с календарем для года, отформатированного в три столбца, разделенных пробелами c. w — ширина в символах каждой даты; каждая строка имеет длину 21 * w + 18 + 2 * c. l — количество строк за каждую неделю.

calendar.firstweekday ()

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

calendar.isleap (год)

Возвращает True, если год является високосным; в противном случае Ложь.

calendar.leapdays (y1, y2)

Возвращает общее количество високосных дней в годах в пределах диапазона (y1, y2).

calendar.month (год, месяц, w = 2, l = 1)

Возвращает многострочную строку с календарем на месяц месяц год, одну строку в неделю плюс две строки заголовка. w — ширина в символах каждой даты; каждая строка имеет длину 7 * w + 6. l — количество строк за каждую неделю.

calendar.monthcalendar (год, месяц)

Возвращает список списков целых. Каждый подсписок обозначает неделю. Дни вне месяца, месяца, года и года установлены на 0; дни в месяце устанавливаются на их день месяца, 1 и выше.

calendar.monthrange (год, месяц)

Возвращает два целых числа. Первый — это код дня недели для первого дня месяца месяца в году; второй — количество дней в месяце. Коды дня недели: от 0 (понедельник) до 6 (воскресенье); номера месяцев от 1 до 12.

calendar.prcal (год, w = 2, l = 1, c = 6)

Как печатать calendar.calendar (год, ш, л, в).

calendar.prmonth (год, месяц, w = 2, l = 1)

Как печать calendar.month (год, месяц, ш, л).

calendar.setfirstweekday (день недели)

Устанавливает первый день каждой недели в код дня недели. Коды дня недели: от 0 (понедельник) до 6 (воскресенье).

calendar.timegm (tupletime)

Инверсия time.gmtime: принимает момент времени в форме кортежа и возвращает тот же момент, что и число с плавающей запятой в секундах с начала эпохи.

calendar.weekday (год, месяц, день)

Возвращает код дня недели для указанной даты. Коды дня недели: от 0 (понедельник) до 6 (воскресенье); номера месяцев от 1 (январь) до 12 (декабрь).

Другие модули и функции

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

Python 3 — Функции

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

Как вы уже знаете, 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/python3

# 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("This is first call to the user defined function!")
printme("Again second call to the same function")

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

This is first call to the user defined function!
Again second call to the same function

Передача по ссылке против значения

Все параметры (аргументы) в языке Python передаются по ссылке. Это означает, что если вы изменяете то, на что ссылается параметр в функции, это изменение также отражается в вызывающей функции. Например —

Live Demo

#!/usr/bin/python3

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   print ("Values inside the function before change: ", mylist)
   mylist[2]=50
   print ("Values inside the function after change: ", mylist)
   return

# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)

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

Values inside the function before change:  [10, 20, 30]
Values inside the function after change:  [10, 20, 50]
Values outside the function:  [10, 20, 50]

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4] # This would assi 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/python3

# 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/python3

# 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/python3

# 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/python3

# 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/python3

# 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 для создания небольших анонимных функций.

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

  • Анонимная функция не может быть прямым вызовом print, потому что лямбда-выражение требует выражения.

  • Лямбда-функции имеют свое собственное локальное пространство имен и не могут получить доступ к переменным, отличным от переменных в их списке параметров и переменных в глобальном пространстве имен.

  • Хотя кажется, что лямбда-выражения являются однострочной версией функции, они не эквивалентны встроенным операторам в C или C ++, цель которых состоит в том, чтобы размещать выделения с помощью передачи функции во время вызова из соображений производительности.

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

Анонимная функция не может быть прямым вызовом print, потому что лямбда-выражение требует выражения.

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

Хотя кажется, что лямбда-выражения являются однострочной версией функции, они не эквивалентны встроенным операторам в C или C ++, цель которых состоит в том, чтобы размещать выделения с помощью передачи функции во время вызова из соображений производительности.

Синтаксис

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

lambda [arg1 [,arg2,.....argn]]:expression

Ниже приведен пример, показывающий, как работает лямбда- форма функции:

Live Demo

#!/usr/bin/python3

# 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/python3

# 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/python3

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 3 — Модули

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

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

пример

Код Python для модуля с именем aname обычно находится в файле с именем aname.py. Вот пример простого модуля support.py —

def print_func( par ):
   print "Hello : ", par
   return

Заявление об импорте

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

import module1[, module2[,... moduleN]

Когда интерпретатор встречает оператор импорта, он импортирует модуль, если модуль присутствует в пути поиска. Путь поиска — это список каталогов, которые интерпретатор ищет перед импортом модуля. Например, чтобы импортировать модуль hello.py, вам нужно поместить следующую команду вверху скрипта:

#!/usr/bin/python3

# 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, используйте следующий оператор —

#!/usr/bin/python3

# Fibonacci numbers module

def fib(n): # return Fibonacci series up to n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
>>> from fib import fib
>>> fib(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

Этот оператор не импортирует весь модуль fib в текущее пространство имен; он просто вводит элемент fibonacci из модуля fib в глобальную таблицу символов импортирующего модуля.

Заявление от … import *

Также возможно импортировать все имена из модуля в текущее пространство имен, используя следующую инструкцию импорта —

from modname import *

Это обеспечивает простой способ импортировать все элементы из модуля в текущее пространство имен; Однако это утверждение следует использовать с осторожностью.

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

Внутри модуля имя модуля (в виде строки) доступно в качестве значения глобальной переменной __name__. Код в модуле будет выполнен, как если бы вы его импортировали, но с __name__, установленным в «__main__».

Добавьте этот код в конце вашего модуля —

Live Demo

#!/usr/bin/python3

# Fibonacci numbers module

def fib(n): # return Fibonacci series up to n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
if __name__ == "__main__":
   f = fib(100)
   print(f)

Когда вы запустите вышеуказанный код, будет отображен следующий вывод.

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

Расположение модулей

Когда вы импортируете модуль, интерпретатор Python ищет модуль в следующих последовательностях:

  • Текущий каталог.

  • Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.

  • Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python3 /.

Текущий каталог.

Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.

Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python3 /.

Путь поиска модуля хранится в системном модуле sys как переменная sys.path . Переменная sys.path содержит текущий каталог, PYTHONPATH и зависящее от установки значение по умолчанию.

Переменная PYTHONPATH

PYTHONPATH — это переменная окружения, состоящая из списка каталогов. Синтаксис PYTHONPATH такой же, как и у переменной оболочки PATH.

Вот типичный PYTHONPATH из системы Windows —

set PYTHONPATH = c:\python34\lib;

А вот типичный PYTHONPATH из системы UNIX —

set PYTHONPATH = /usr/local/lib/python

Пространства имен и область видимости

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

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

  • Каждая функция имеет свое локальное пространство имен. Методы класса следуют тому же правилу видимости, что и обычные функции.

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

  • Следовательно, чтобы присвоить значение глобальной переменной внутри функции, сначала необходимо использовать глобальный оператор.

  • Оператор global VarName сообщает Python, что VarName является глобальной переменной. Python прекращает поиск переменной в локальном пространстве имен.

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

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

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

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

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

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

Live Demo

#!/usr/bin/python3

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/python3

# 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 () вызывается из функции, он возвращает все имена, к которым можно получить глобальный доступ из этой функции.

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

Если globals () вызывается из функции, он возвращает все имена, к которым можно получить глобальный доступ из этой функции.

Тип возврата обеих этих функций — словарь. Поэтому имена могут быть извлечены с помощью функции keys () .

Функция reload ()

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

Поэтому, если вы хотите повторно выполнить код верхнего уровня в модуле, вы можете использовать функцию reload () . Функция reload () снова импортирует ранее импортированный модуль. Синтаксис функции reload () такой:

reload(module_name)

Здесь имя_модуля — это имя модуля, который вы хотите перезагрузить, а не строка, содержащая имя модуля. Например, чтобы перезагрузить модуль hello, сделайте следующее:

reload(hello)

Пакеты в Python

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

Рассмотрим файл Pots.py, доступный в телефонном справочнике. Этот файл имеет следующую строку исходного кода —

#!/usr/bin/python3

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/python3

# 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 3 — Файлы ввода / вывода

В этой главе рассматриваются все основные функции ввода / вывода, доступные в Python 3. Дополнительные функции см. В стандартной документации Python.

Печать на экран

Простейший способ создания вывода — использовать оператор print, в котором вы можете передать ноль или более выражений, разделенных запятыми. Эта функция преобразует передаваемые выражения в строку и записывает результат в стандартный вывод следующим образом:

Live Demo

#!/usr/bin/python3

print ("Python is really a great language,", "isn't it?")

Это дает следующий результат на вашем стандартном экране —

Python is really a great language, isn't it?

Чтение ввода с клавиатуры

Python 2 имеет две встроенные функции для чтения данных со стандартного ввода, который по умолчанию поступает с клавиатуры. Эти функции являются input () и raw_input ()

В Python 3 функция raw_input () устарела. Кроме того, функции input () читают данные с клавиатуры в виде строки независимо от того, заключены они в кавычки (» или «») или нет.

Функция ввода

Функция input ([prompt]) эквивалентна raw_input, за исключением того, что она предполагает, что input является допустимым выражением Python, и возвращает вам оцененный результат.

#!/usr/bin/python3

>>> x = input("something:")
something:10

>>> x
'10'

>>> x = input("something:")
something:'10' #entered data treated as string with or without ''

>>> x
"'10'"

Открытие и закрытие файлов

До сих пор вы читали и писали на стандартный ввод и вывод. Теперь мы увидим, как использовать реальные файлы данных.

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

RB & плюс;

Открывает файл для чтения и записи в двоичном формате. Указатель файла помещается в начале файла.

5

вес

Открывает файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

6

термометру

Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

7

ж & плюс;

Открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

8

термометр & плюс;

Открывает файл для записи и чтения в двоичном формате. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

9

Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

10

аб

Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

11

плюс;

Открывает файл для добавления и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

12

AB & плюс;

Открывает файл для добавления и чтения в двоичном формате. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

р

Открывает файл только для чтения. Указатель файла находится в начале файла. Это режим «по умолчанию».

Р.Б.

Открывает файл для чтения только в двоичном формате. Указатель файла находится в начале файла. Это режим «по умолчанию».

г & плюс;

Открывает файл для чтения и записи. Указатель файла помещается в начале файла.

RB & плюс;

Открывает файл для чтения и записи в двоичном формате. Указатель файла помещается в начале файла.

вес

Открывает файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

термометру

Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.

ж & плюс;

Открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

термометр & плюс;

Открывает файл для записи и чтения в двоичном формате. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.

Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

аб

Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.

плюс;

Открывает файл для добавления и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

AB & плюс;

Открывает файл для добавления и чтения в двоичном формате. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

Атрибуты объекта файла

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

Вот список всех атрибутов, связанных с файловым объектом —

Sr.No. Атрибут и описание
1

file.closed

Возвращает true, если файл закрыт, иначе false.

2

file.mode

Возвращает режим доступа, с которым файл был открыт.

3

имя файла

Возвращает имя файла.

file.closed

Возвращает true, если файл закрыт, иначе false.

file.mode

Возвращает режим доступа, с которым файл был открыт.

имя файла

Возвращает имя файла.

Примечание. Атрибут softtspace не поддерживается в Python 3.x

пример

Live Demo

#!/usr/bin/python3

# 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)
fo.close()

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

Name of the file:  foo.txt
Closed or not :  False
Opening mode :  wb

Метод close ()

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

Python автоматически закрывает файл, когда ссылочный объект файла переназначается другому файлу. Рекомендуется использовать метод close () для закрытия файла.

Синтаксис

fileObject.close();

пример

Live Demo

#!/usr/bin/python3

# Open a file
fo = open("foo.txt", "wb")
print ("Name of the file: ", fo.name)

# Close opened file
fo.close()

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

Name of the file:  foo.txt

Чтение и запись файлов

Файловый объект предоставляет набор методов доступа, чтобы сделать нашу жизнь проще. Мы увидим, как использовать методы read () и write () для чтения и записи файлов.

Метод write ()

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

Метод write () не добавляет символ новой строки (‘\ n’) в конец строки —

Синтаксис

fileObject.write(string);

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

пример

#!/usr/bin/python3

# Open a file
fo = open("foo.txt", "w")
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/python3

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("Read String is : ", str)

# Close opened file
fo.close()

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

Read String is :  Python is

Позиции файлов

Метод tell () сообщает текущую позицию в файле; другими словами, следующее чтение или запись будет происходить с таким количеством байтов от начала файла.

Метод seek (offset [, from]) изменяет текущую позицию файла. Аргумент смещения указывает количество байтов для перемещения. Аргумент from указывает ссылочную позицию, откуда байты должны быть перемещены.

Если from установлен на 0, начало файла используется в качестве ссылочной позиции. Если установлено значение 1, текущая позиция используется в качестве контрольной позиции. Если он установлен на 2, то конец файла будет взят в качестве ссылочной позиции.

пример

Давайте возьмем файл foo.txt , который мы создали выше.

#!/usr/bin/python3

# 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 opened 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/python3
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/python3
import os

# Delete file test2.txt
os.remove("text2.txt")

Каталоги в Python

Все файлы содержатся в разных каталогах, и у Python нет проблем с этим. Модуль os имеет несколько методов, которые помогут вам создавать, удалять и изменять каталоги.

Метод mkdir ()

Вы можете использовать метод mkdir () модуля os для создания каталогов в текущем каталоге. Вы должны предоставить аргумент этому методу, который содержит имя каталога, который будет создан.

Синтаксис

os.mkdir("newdir")

пример

Ниже приведен пример создания теста каталога в текущем каталоге:

#!/usr/bin/python3
import os

# Create a directory "test"
os.mkdir("test")

Метод chdir ()

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

Синтаксис

os.chdir("newdir")

пример

Ниже приведен пример для перехода в каталог / home / newdir —

#!/usr/bin/python3
import os

# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

Метод getcwd ()

Метод getcwd () отображает текущий рабочий каталог.

Синтаксис

os.getcwd()

пример

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

#!/usr/bin/python3
import os

# This would give location of the current directory
os.getcwd()

Метод rmdir ()

Метод rmdir () удаляет каталог, который передается в качестве аргумента в методе.

Перед удалением каталога все содержимое в нем должно быть удалено.

Синтаксис

os.rmdir('dirname')

пример

Ниже приведен пример удаления каталога «/ tmp / test». Требуется дать полное имя каталога, иначе он будет искать этот каталог в текущем каталоге.

#!/usr/bin/python3
import os

# This would  remove "/tmp/test"  directory.
os.rmdir( "/tmp/test"  )

Методы, связанные с файлами и каталогами

Существует три важных источника, которые предоставляют широкий спектр служебных методов для обработки и управления файлами и каталогами в операционных системах Windows и Unix. Они заключаются в следующем —

Методы объекта файла

Файловый объект предоставляет функции для работы с файлами.

Методы объекта ОС

Это предоставляет методы для обработки файлов, а также каталогов.

Python 3 — Обработка исключений

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

Обработка исключений — это будет описано в этом руководстве. Вот список стандартных исключений, доступных в Python — Стандартные исключения .

Утверждения — это будет описано в руководстве по утверждениям в Python 3 .

Стандартные исключения

Вот список стандартных исключений, доступных в Python.

Sr.No. Название и описание исключения
1

исключение

Базовый класс для всех исключений

2

StopIteration

Возникает, когда метод next () итератора не указывает ни на один объект.

3

SystemExit

Вызывается функцией sys.exit ().

4

Стандартная ошибка

Базовый класс для всех встроенных исключений, кроме StopIteration и SystemExit.

5

ArithmeticError

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

6

OverflowError

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

7

FloatingPointError

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

8

ZeroDivisonError

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

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

OSError

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

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

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

ZeroDivisonError

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

AssertionError

Вызывается в случае сбоя утверждения Assert.

AttributeError

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

EOFError

Возникает, когда нет ввода ни от функции raw_input (), ни от input () и достигнут конец файла.

ImportError

Возникает при сбое оператора импорта.

KeyboardInterrupt

Возникает, когда пользователь прерывает выполнение программы, обычно нажатием Ctrl + c.

LookupError

Базовый класс для всех ошибок поиска.

IndexError

Возникает, когда индекс не найден в последовательности.

KeyError

Возникает, когда указанный ключ не найден в словаре.

NameError

Возникает, когда идентификатор не найден в локальном или глобальном пространстве имен.

UnboundLocalError

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

EnvironmentError

Базовый класс для всех исключений, которые происходят вне среды Python.

IOError

Возникает при сбое операции ввода / вывода, такой как оператор print или функция open (), при попытке открыть файл, который не существует.

OSError

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

Ошибка синтаксиса

Возникает при возникновении ошибки в синтаксисе Python.

IndentationError

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

Системная ошибка

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

SystemExit

Возникает при выходе из интерпретатора Python с помощью функции sys.exit (). Если не обрабатывается в коде, интерпретатор завершает работу.

TypeError

Вызывается при попытке выполнить операцию или функцию, которая недопустима для указанного типа данных.

ValueError

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

Ошибка выполнения

Возникает, когда сгенерированная ошибка не попадает ни в одну категорию.

NotImplementedError

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

Утверждения в Python

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

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

  • Утверждения выполняются оператором assert, новейшим ключевым словом Python, представленным в версии 1.5.

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

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

Утверждения выполняются оператором assert, новейшим ключевым словом Python, представленным в версии 1.5.

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

Утверждение утверждения

Когда он встречает утверждение assert, Python оценивает сопровождающее выражение, которое, как мы надеемся, истинно. Если выражение ложно, Python вызывает исключение AssertionError .

Синтаксис для assert —

assert Expression[, Arguments]

Если утверждение не выполняется, Python использует ArgumentExpression в качестве аргумента для AssertionError. Исключения AssertionError могут быть перехвачены и обработаны, как и любое другое исключение, с помощью оператора try-exc. Если они не обрабатываются, они завершат программу и произведут трассировку.

пример

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

Live Demo

#!/usr/bin/python3

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/python3

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/python3

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.
   ......................

Примечание. Вы можете указать только пункт (ы) или пункт finally, но не оба. Вы не можете использовать предложение else вместе с предложением finally.

пример

Live Demo

#!/usr/bin/python3

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")
   fh.close()

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

Error: can't find file or read data

Тот же пример можно написать более четко следующим образом:

Live Demo

#!/usr/bin/python3

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")

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

Going to close the file

Когда в блоке try создается исключение, выполнение немедленно передается блоку finally . После того, как все операторы в блоке finally выполнены, исключение вызывается снова и обрабатывается в операторах исключения, если оно присутствует на следующем более высоком уровне оператора try- exc.

Аргумент Исключения

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

try:
   You do your operations here
   ......................
except ExceptionType as Argument:
   You can print value of Argument here...

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

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

пример

Ниже приведен пример для одного исключения —

Live Demo

#!/usr/bin/python3

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError as 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 Exception(level)
      # The code below to this would not be executed
      # if we raise the exception
   return level

Примечание. Чтобы перехватить исключение, предложение «кроме» должно ссылаться на то же исключение, выбрасываемое либо как объект класса, либо как простая строка. Например, чтобы перехватить вышеупомянутое исключение, мы должны написать предложение исключение следующим образом:

try:
   Business Logic here...
except Exception as e:
   Exception handling here using e.args...
else:
   Rest of the code here...

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

Live Demo

#!/usr/bin/python3

def functionName( level ):
   if level <1:
      raise Exception(level)
      # The code below to this would not be executed
      # if we raise the exception
   return level

try:
   l = functionName(-10)
   print ("level = ",l)
except Exception as e:
   print ("error in level argument",e.args[0])

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

error in level argument -10

Определяемые пользователем исключения

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 3 — Объектно-ориентированный

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 — это переменная класса, значение которой является общим для всех экземпляров a в этом классе. Доступ к нему можно получить как Employee.empCount внутри класса или за его пределами.

  • Первый метод __init __ () — это специальный метод, который называется конструктором класса или методом инициализации, который Python вызывает при создании нового экземпляра этого класса.

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

Переменная empCount — это переменная класса, значение которой является общим для всех экземпляров a в этом классе. Доступ к нему можно получить как 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/python3

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.salary = 7000  # Add an 'salary' attribute.
emp1.name = 'xyz'  # Modify 'age' attribute.
del emp1.salary  # 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, 'salary')    # Returns true if 'salary' attribute exists
getattr(emp1, 'salary')    # Returns value of 'salary' attribute
setattr(emp1, 'salary', 7000) # Set attribute 'salary' at 7000
delattr(emp1, 'salary')    # Delete attribute 'salary'

Встроенные атрибуты класса

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

  • __dict__ — словарь, содержащий пространство имен класса.

  • __doc__ — Строка документации класса или нет, если она не определена.

  • __name__ — Имя класса.

  • __module__ — Имя модуля, в котором определяется класс. Этот атрибут «__main__» в интерактивном режиме.

  • __bases__ — возможно пустой кортеж, содержащий базовые классы, в порядке их появления в списке базовых классов.

__dict__ — словарь, содержащий пространство имен класса.

__doc__ — Строка документации класса или нет, если она не определена.

__name__ — Имя класса.

__module__ — Имя модуля, в котором определяется класс. Этот атрибут «__main__» в интерактивном режиме.

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

Для приведенного выше класса давайте попробуем получить доступ ко всем этим атрибутам —

Live Demo

#!/usr/bin/python3

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)

emp1 = Employee("Zara", 2000)
emp2 = Employee("Manni", 5000)
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__: (<class 'object'>,)
Employee.__dict__: {
   'displayCount': <function Employee.displayCount at 0x0160D2B8>, 
   '__module__': '__main__', '__doc__': 'Common base class for all employees', 
   'empCount': 2, '__init__': 
   <function Employee.__init__ at 0x0124F810>, 'displayEmployee': 
   <function Employee.displayEmployee at 0x0160D300>,
   '__weakref__': 
   <attribute '__weakref__' of 'Employee' objects>, '__dict__': 
   <attribute '__dict__' of 'Employee' objects>
}

Уничтожение объектов (Сборка мусора)

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/python3

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

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

140338326963984 140338326963984 140338326963984
Point destroyed

Примечание. В идеале вы должны определить свои классы в отдельном файле, а затем импортировать их в основной файл программы с помощью оператора import .

В приведенном выше примере предполагается, что определение класса Point содержится в point.py, и в нем нет другого исполняемого кода.

#!/usr/bin/python3
import point

p1 = point.Point()

Наследование классов

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

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

Синтаксис

Производные классы объявляются так же, как их родительский класс; однако список базовых классов для наследования дается после имени класса —

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

пример

Live Demo

#!/usr/bin/python3

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 calss 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/python3

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/python3

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/python3

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 3 — Регулярные выражения

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

Модуль re обеспечивает полную поддержку Perl-подобных регулярных выражений в Python. Модуль re вызывает исключение re.error, если при компиляции или использовании регулярного выражения возникает ошибка.

Мы рассмотрим две важные функции, которые будут использоваться для обработки регулярных выражений. Тем не менее, сначала небольшая вещь: есть различные символы, которые будут иметь особое значение, когда они используются в регулярном выражении. Чтобы избежать путаницы при работе с регулярными выражениями, мы бы использовали Raw Strings как r’expression .

Основные модели, которые соответствуют одиночным символам

Sr.No. Выражение и матчи
1

а, х, 9, <

обычные персонажи точно совпадают.

2

, (Период)

соответствует любому отдельному символу, кроме новой строки ‘\ n’

3

\ ш

соответствует «словесному» символу: букве или цифре или подчеркиванию [a-zA-Z0-9_].

4

\ W

соответствует любому несловесному символу.

5

\ б

граница между словом и не словом

6

\ s

соответствует одному символу пробела — пробел, новая строка, возврат, табуляция

7

\ S

соответствует любому непробельному символу.

8

\ t, \ n, \ r

вкладка, новая строка, возврат

9

\ d

десятичная цифра [0-9]

10

^

соответствует началу строки

11

$

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

12

\

подавить «особенность» персонажа.

а, х, 9, <

обычные персонажи точно совпадают.

, (Период)

соответствует любому отдельному символу, кроме новой строки ‘\ n’

\ ш

соответствует «словесному» символу: букве или цифре или подчеркиванию [a-zA-Z0-9_].

\ W

соответствует любому несловесному символу.

\ б

граница между словом и не словом

\ s

соответствует одному символу пробела — пробел, новая строка, возврат, табуляция

\ S

соответствует любому непробельному символу.

\ t, \ n, \ r

вкладка, новая строка, возврат

\ d

десятичная цифра [0-9]

^

соответствует началу строки

$

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

\

подавить «особенность» персонажа.

Флаги компиляции

Флаги компиляции позволяют изменить некоторые аспекты работы регулярных выражений. Флаги доступны в модуле re под двумя именами: длинное имя, например IGNORECASE, и короткая однобуквенная форма, например I.

Sr.No. Флаг и смысл
1

ASCII, A

Делает несколько escape-символов, таких как \ w, \ b, \ s и \ d, совпадающими только для символов ASCII с соответствующим свойством.

2

DOTALL, S

Сделать, сопоставить любой символ, в том числе новые строки

3

IGNORECASE, я

Делать нечувствительные к регистру совпадения

4

LOCALE, L

Сделайте совпадение с учетом локали

5

МУЛЬТИЛАЙН, М

Многострочное сопоставление, влияющее на ^ и $

6

VERBOSE, X (для «расширенного»)

Включить подробные RE, которые могут быть организованы более четко и понятно

ASCII, A

Делает несколько escape-символов, таких как \ w, \ b, \ s и \ d, совпадающими только для символов ASCII с соответствующим свойством.

DOTALL, S

Сделать, сопоставить любой символ, в том числе новые строки

IGNORECASE, я

Делать нечувствительные к регистру совпадения

LOCALE, L

Сделайте совпадение с учетом локали

МУЛЬТИЛАЙН, М

Многострочное сопоставление, влияющее на ^ и $

VERBOSE, X (для «расширенного»)

Включить подробные RE, которые могут быть организованы более четко и понятно

Функция матча

Эта функция пытается сопоставить шаблон RE со строкой с необязательными флагами .

Вот синтаксис для этой функции —

re.match(pattern, string, flags = 0)

Вот описание параметров —

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

шаблон

Это регулярное выражение для сопоставления.

2

строка

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

3

флаги

Вы можете указать разные флаги используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

шаблон

Это регулярное выражение для сопоставления.

строка

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

флаги

Вы можете указать разные флаги используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

Функция re.match возвращает объект соответствия в случае успеха, None в случае ошибки. Мы используем функцию group (num) или groups () объекта match, чтобы получить соответствующее выражение.

Sr.No. Метод и описание объекта соответствия
1

группа (число = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

группа (число = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

пример

Live Demo

#!/usr/bin/python3
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

группа (число = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

группа (число = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

группы ()

Этот метод возвращает все подходящие подгруппы в кортеже (пусто, если их не было)

пример

Live Demo

#!/usr/bin/python3
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!!")

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

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

Сопоставление с поиском

Python предлагает две различные примитивные операции, основанные на регулярных выражениях: проверка на совпадение только в начале строки, а поиск проверяет совпадение в любом месте строки (это то, что Perl делает по умолчанию).

пример

Live Demo

#!/usr/bin/python3
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 , заменяя все вхождения, если не указано max . Этот метод возвращает измененную строку.

пример

Live Demo

#!/usr/bin/python3
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 —

^

Соответствует началу строки.

$

Соответствует концу строки.

,

Соответствует любому отдельному символу, кроме новой строки. Использование опции 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

([Рр] ython (,)?) +

Совпадение «Питон», «Питон, питон, питон» и т. Д.

\ D \ d & плюс;

Нет группы: + повторяется \ d

(\ D \ d) +

Сгруппировано: + повторяет \ D \ d пару

([Рр] 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 3 — 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, чтобы сделать файл исполняемым.

Live Demo

#!/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>')

Примечание. В первой строке скрипта должен быть указан путь к исполняемому файлу Python. В Linux это должно быть #! / Usr / bin / python3

Введите следующий URL в вашем браузере

http://localhost:8080/cgi-bin/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. Нажмите на эту ссылку, чтобы увидеть результат Получить среду

Live Demo

#!/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 3 — доступ к базе данных MySQL

Стандарт Python для интерфейсов базы данных — это DB-API Python. Большинство интерфейсов баз данных Python соответствуют этому стандарту.

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

  • овод
  • Msql
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • оракул
  • Sybase
  • SQLite

Вот список доступных интерфейсов базы данных Python — интерфейсы базы данных Python и API . Вы должны загрузить отдельный модуль API БД для каждой базы данных, к которой вам нужен доступ. Например, если вам нужен доступ к базе данных Oracle, а также к базе данных MySQL, вы должны загрузить модули базы данных Oracle и MySQL.

API БД обеспечивает минимальный стандарт для работы с базами данных, использующими структуры и синтаксис Python, где это возможно. Этот API включает в себя следующее:

  • Импорт модуля API.
  • Получение соединения с базой данных.
  • Выдача операторов SQL и хранимых процедур.
  • Закрытие соединения

Python имеет встроенную поддержку SQLite. В этом разделе мы изучим все концепции, используя MySQL. Модуль MySQLdb, популярный интерфейс с MySQL, не совместим с Python 3. Вместо этого мы будем использовать модуль PyMySQL .

Что такое PyMySQL?

PyMySQL — это интерфейс для подключения к серверу баз данных MySQL из Python. Он реализует API базы данных Python v2.0 и содержит чистую клиентскую библиотеку MySQL Python. Целью PyMySQL является быстрая замена MySQLdb.

Как установить PyMySQL?

Прежде чем продолжить, убедитесь, что на вашем компьютере установлен PyMySQL. Просто введите следующее в вашем скрипте Python и выполните его —

#!/usr/bin/python3

import pymysql

Если он дает следующий результат, то это означает, что модуль MySQLdb не установлен —

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      Import pymysql
ImportError: No module named pymysql

Последний стабильный выпуск доступен на PyPI и может быть установлен с помощью pip —

pip install pymysql

В качестве альтернативы (например, если pip недоступен), tarball можно загрузить с GitHub и установить вместе с Setuptools следующим образом:

$ # X.X is the desired pymysql version (e.g. 0.5 or 0.6).
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python setup.py install
$ # The folder PyMySQL* can be safely removed now.

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

Подключение к базе данных

Перед подключением к базе данных MySQL убедитесь в следующем:

  • Вы создали базу данных TESTDB.

  • Вы создали таблицу EMPLOYEE в TESTDB.

  • В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

  • Идентификатор пользователя «testuser» и пароль «test123» установлены для доступа к TESTDB.

  • Модуль Python PyMySQL правильно установлен на вашем компьютере.

  • Вы прошли учебник по MySQL, чтобы понять основы MySQL.

Вы создали базу данных TESTDB.

Вы создали таблицу EMPLOYEE в TESTDB.

В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

Идентификатор пользователя «testuser» и пароль «test123» установлены для доступа к TESTDB.

Модуль Python PyMySQL правильно установлен на вашем компьютере.

Вы прошли учебник по MySQL, чтобы понять основы MySQL.

пример

Ниже приведен пример соединения с базой данных MySQL «TESTDB» —

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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()

При запуске этого скрипта он выдает следующий результат.

Database version : 5.5.20-log

Если соединение с источником данных установлено, то объект соединения возвращается и сохраняется в БД для дальнейшего использования, в противном случае для БД установлено значение Нет. Затем объект db используется для создания объекта курсора , который, в свою очередь, используется для выполнения запросов SQL. Наконец, перед выходом он гарантирует, что соединение с базой данных закрыто и ресурсы освобождены.

Создание таблицы базы данных

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

пример

Давайте создадим таблицу базы данных EMPLOYEE —

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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()

ВСТАВИТЬ Операция

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

пример

В следующем примере выполняется инструкция SQL INSERT для создания записи в таблице EMPLOYEE —

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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/python3

import pymysql

# Open database connection
db = pymysql.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/python3

import pymysql

# Open database connection
db = pymysql.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 = "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 fetch data")

# disconnect from server
db.close()

Выход

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

fname = Mac, lname = Mohan, age = 20, sex = M, income = 2000

Операция обновления

ОБНОВЛЕНИЕ Операция в любой базе данных означает обновление одной или нескольких записей, которые уже доступны в базе данных.

Следующая процедура обновляет все записи, имеющие SEX как «M» . Здесь мы увеличиваем ВОЗРАСТ всех мужчин на один год.

пример

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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/python3

import pymysql

# Open database connection
db = pymysql.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 3 — Сетевое программирование

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/python3           # This is server.py file
import socket                                         

# create a socket object
serversocket = socket.socket(
	        socket.AF_INET, socket.SOCK_STREAM) 

# get local machine name
host = socket.gethostname()                           

port = 9999                                           

# bind to the port
serversocket.bind((host, port))                                  

# queue up to 5 requests
serversocket.listen(5)                                           

while True:
   # establish a connection
   clientsocket,addr = serversocket.accept()      

   print("Got a connection from %s" % str(addr))
    
   msg = 'Thank you for connecting'+ "\r\n"
   clientsocket.send(msg.encode('ascii'))
   clientsocket.close()

Простой клиент

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

Socket.connect (имя хоста, порт) открывает TCP-соединение с именем хоста на порту . Когда у вас есть открытый сокет, вы можете читать из него, как любой объект ввода-вывода. Когда закончите, не забудьте закрыть его, как вы бы закрыли файл.

пример

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

#!/usr/bin/python3           # This is client.py file

import socket

# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# get local machine name
host = socket.gethostname()                           

port = 9999

# connection to hostname on the port.
s.connect((host, port))                               

# Receive no more than 1024 bytes
msg = s.recv(1024)                                     

s.close()
print (msg.decode('ascii'))

Теперь запустите этот 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

Выход

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

on server terminal
Got a connection from ('192.168.1.10', 3747)
On client terminal
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 3 — отправка электронной почты с использованием 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/python3

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-сервером. Если вы не используете службу веб-почты (например, gmail или Yahoo! Mail), ваш поставщик электронной почты должен предоставить вам данные сервера исходящей почты, которые вы можете предоставить им, а именно:

mail = smtplib.SMTP('smtp.gmail.com', 587)

Отправка электронной почты в формате HTML с использованием Python

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

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

пример

Ниже приведен пример отправки содержимого HTML в виде электронного письма. Попробуйте один раз —

#!/usr/bin/python3

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»), чтобы кодирование base 64 перед передачей.

пример

Ниже приведен пример, который отправляет файл /tmp/test.txt в качестве вложения. Попробуйте один раз —

#!/usr/bin/python3

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 3 — многопоточное программирование

Запуск нескольких потоков аналогичен запуску нескольких различных программ одновременно, но со следующими преимуществами:

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

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

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

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

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

  • Это может быть прервано (прервано).

  • Он может быть временно приостановлен (также известный как спящий режим) во время работы других потоков — это называется уступкой.

Это может быть прервано (прервано).

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

Есть два разных вида темы —

  • поток ядра
  • пользовательская нить

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

Есть два модуля, которые поддерживают использование потоков в Python3 —

  • _нить
  • нарезания резьбы

Потоковый модуль давно устарел. Пользователям рекомендуется использовать модуль потоков. Следовательно, в Python 3 модуль «поток» больше не доступен. Тем не менее, он был переименован в «_thread» для обратной совместимости в Python3.

Начиная новую тему

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

_thread.start_new_thread ( function, args[, kwargs] )

Этот вызов метода позволяет быстро и эффективно создавать новые потоки как в Linux, так и в Windows.

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

Здесь args — это кортеж аргументов; используйте пустой кортеж для вызова функции без передачи аргументов. kwargs — это необязательный словарь аргументов ключевых слов.

пример

#!/usr/bin/python3

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: Fri Feb 19 09:41:39 2016
Thread-2: Fri Feb 19 09:41:41 2016
Thread-1: Fri Feb 19 09:41:41 2016
Thread-1: Fri Feb 19 09:41:43 2016
Thread-2: Fri Feb 19 09:41:45 2016
Thread-1: Fri Feb 19 09:41:45 2016
Thread-1: Fri Feb 19 09:41:47 2016
Thread-2: Fri Feb 19 09:41:49 2016
Thread-2: Fri Feb 19 09:41:53 2016

Программа идет в бесконечном цикле. Вам придется нажать Ctrl-C, чтобы остановить

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

Поточный модуль

Более новый модуль потоков, включенный в 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/python3

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, delay, counter):
   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()
thread1.join()
thread2.join()
print ("Exiting Main Thread")

Результат

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

Starting Thread-1
Starting Thread-2
Thread-1: Fri Feb 19 10:00:21 2016
Thread-2: Fri Feb 19 10:00:22 2016
Thread-1: Fri Feb 19 10:00:22 2016
Thread-1: Fri Feb 19 10:00:23 2016
Thread-2: Fri Feb 19 10:00:24 2016
Thread-1: Fri Feb 19 10:00:24 2016
Thread-1: Fri Feb 19 10:00:25 2016
Exiting Thread-1
Thread-2: Fri Feb 19 10:00:26 2016
Thread-2: Fri Feb 19 10:00:28 2016
Thread-2: Fri Feb 19 10:00:30 2016
Exiting Thread-2
Exiting Main Thread

Синхронизация потоков

Модуль потоков, поставляемый с Python, включает в себя простой в реализации механизм блокировки, который позволяет синхронизировать потоки. Новая блокировка создается путем вызова метода Lock () , который возвращает новую блокировку.

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

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

Метод release () нового объекта блокировки используется для снятия блокировки, когда она больше не требуется.

пример

#!/usr/bin/python3

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: Fri Feb 19 10:04:14 2016
Thread-1: Fri Feb 19 10:04:15 2016
Thread-1: Fri Feb 19 10:04:16 2016
Thread-2: Fri Feb 19 10:04:18 2016
Thread-2: Fri Feb 19 10:04:20 2016
Thread-2: Fri Feb 19 10:04:22 2016
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/python3

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 3 — обработка 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/python3

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 scientific 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, обозначенного file, в объект дерева DOM.

пример

#!/usr/bin/python3

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 scientific 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 3 — Программирование GUI (Tkinter)

Python предоставляет различные варианты для разработки графических пользовательских интерфейсов (GUI). Наиболее важные функции перечислены ниже.

  • Tkinter — Tkinter — это интерфейс Python для инструментария Tk GUI, поставляемый с Python. Мы бы посмотрели этот вариант в этой главе.

  • wxPython — это интерфейс Python с открытым исходным кодом для инструментария GUI wxWidgets. Вы можете найти полное руководство по WxPython здесь .

  • PyQt — это также интерфейс Python для популярной кроссплатформенной библиотеки Qt GUI. У TutorialsPoint есть очень хорошее руководство по PyQt здесь .

  • JPython — JPython — это порт Python для Java, который дает сценариям Python беспрепятственный доступ к библиотекам классов Java на локальной машине http://www.jython.org .

Tkinter — Tkinter — это интерфейс Python для инструментария Tk GUI, поставляемый с Python. Мы бы посмотрели этот вариант в этой главе.

wxPython — это интерфейс Python с открытым исходным кодом для инструментария GUI wxWidgets. Вы можете найти полное руководство по WxPython здесь .

PyQt — это также интерфейс Python для популярной кроссплатформенной библиотеки Qt GUI. У TutorialsPoint есть очень хорошее руководство по PyQt здесь .

JPython — JPython — это порт Python для Java, который дает сценариям Python беспрепятственный доступ к библиотекам классов Java на локальной машине http://www.jython.org .

Есть много других доступных интерфейсов, которые вы можете найти в сети.

Tkinter Программирование

Tkinter — это стандартная библиотека GUI для Python. Python в сочетании с Tkinter обеспечивает быстрый и простой способ создания приложений с графическим интерфейсом. Tkinter предоставляет мощный объектно-ориентированный интерфейс для инструментария Tk GUI.

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

  • Импортируйте модуль Tkinter .

  • Создайте главное окно приложения с графическим интерфейсом.

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

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

Импортируйте модуль Tkinter .

Создайте главное окно приложения с графическим интерфейсом.

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

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

пример

#!/usr/bin/python3

import tkinter # note that module name has changed from Tkinter in Python 2 to tkinter in Python 3
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 3 — программирование расширений на 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 initModule() {
   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 initModule() {
   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 as.

Для вышеуказанного модуля вам нужно подготовить следующий скрипт 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/python3
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 для успеха. Tuple — это 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}.