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

Модуль __future__

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

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

from __future__ import division

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

Наиболее заметным и наиболее известным изменением в Python 3 является то, как printфункция используется. Использование круглых скобок () с функцией печати теперь обязательно. Это было необязательно в 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. Чтобы получить деление с плавающей запятой, числитель или знаменатель должны явно использоваться как float. Следовательно, либо 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) и двухбайтовые классы: байтовые и байтовые массивы.

Функция 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 - это интерпретируемый, интерактивный и объектно-ориентированный язык сценариев высокого уровня. Python разработан для удобочитаемости. Он часто использует английские ключевые слова, тогда как другие языки используют знаки препинания. В нем меньше синтаксических конструкций, чем в других языках.

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

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

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

  • Python is a Beginner's Language - Python - отличный язык для начинающих программистов и поддерживает разработку широкого спектра приложений, от простой обработки текста до веб-браузеров и игр.

История Python

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

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

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

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

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

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

Возможности Python

Возможности Python включают в себя -

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

  • Easy-to-read - Код Python более четко определен и виден глазам.

  • Easy-to-maintain - Исходный код Python довольно прост в обслуживании.

  • A broad standard library - Большая часть библиотеки Python очень портативна и кроссплатформенна, совместима с UNIX, Windows и Macintosh.

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

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

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

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

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

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

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

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

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

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

  • Он поддерживает автоматический сбор мусора.

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

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

Note- Для установки 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

Установка из исходников

Загрузите архив с исходным кодом Gzip с 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/

  • 64-разрядная / 32-разрядная программа установки Mac OS X - python-3.5.1-macosx10.6.pkg
  • 32-разрядная программа установки Mac OS X i386 / PPC - python-3.5.1-macosx10.5.pkg

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

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

Python Official Website - https://www.python.org/

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

Python Documentation Website- www.python.org/doc/

Настройка PATH

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

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

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

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

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

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

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

  • In the csh shell - введите setenv PATH "$ PATH: / usr / local / bin / python3" и нажмите Enter.

  • In the bash shell (Linux) - введите export PYTHONPATH = / usr / local / bin / python3.4 и нажмите Enter.

  • In the sh or ksh shell - введите PATH = "$ PATH: / usr / local / bin / python3" и нажмите Enter.

Note - / usr / local / bin / python3 - это путь к каталогу Python.

Установка пути в Windows

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

  • At the command prompt - введите path% path%; C: \ Python и нажмите Enter.

Note - 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, чтобы упростить переключение библиотек модулей.

Запуск Python

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

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

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

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

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

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

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

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

-d

обеспечить вывод отладки

2

-O

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

3

-S

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

4

-v

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

5

-X

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

6

-c cmd

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

7

file

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

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

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

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

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

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

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

  • Unix - IDLE - это самая первая Unix IDE для Python.

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

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

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

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

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

Язык 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!

Программирование в режиме сценария

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

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

print ("Hello, Python!")

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

On Linux

$ python test.py

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

Hello, Python!

On Windows

C:\Python34>Python test.py

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

Hello, Python!

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

#!/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 - это язык программирования с учетом регистра. Таким образом,Manpower и manpower - это два разных идентификатора в Python.

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

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

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

  • Идентификатор, начинающийся с двух знаков подчеркивания, указывает на сильный частный идентификатор.

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

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

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

и exec не
в виде Ну наконец то или же
утверждать за проходить
сломать из Распечатать
класс Глобальный поднять
Продолжить если возвращение
def импорт пытаться
дель в в то время как
Элиф is with
else lambda yield
except

Lines and Indentation

Python does not use braces({}) to indicate blocks of code for class and function definitions or flow control. Blocks of code are denoted by line indentation, which is rigidly enforced.

The number of spaces in the indentation is variable, but all statements within the block must be indented the same amount. For example −

if True:
   print ("True")

else:
   print ("False")

However, the following block generates an error −

if True:
   print ("Answer")
   print ("True")

else:
   print "(Answer")
   print ("False")

Thus, in Python all the continuous lines indented with the same number of spaces would form a block. The following example has various statement blocks −

Note − Do not try to understand the logic at this point of time. Just make sure you understood the various blocks even if they are without braces.

#!/usr/bin/python3
import sys

file_finish = "end"
file_text = ""
contents=[]

file_name=input("Enter filename: ")
if len(file_name) == 0:
   print("Please enter filename")
   sys.exit()

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 = input("Enter text: ")
   contents.append(file_text)

   if file_text == file_finish:
      # close the file
      file.close()
      break

print(contents)
data = ' '.join([str(elem) for elem in contents])  
print(data)
file.write(data)
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)

Multi-Line Statements

Statements in Python typically end with a new line. Python, however, allows the use of the line continuation character (\) to denote that the line should continue. For example −

total = item_one + \
        item_two + \
        item_three

The statements contained within the [], {}, or () brackets do not need to use the line continuation character. For example −

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

Quotation in Python

Python accepts single ('), double (") and triple (''' or """) quotes to denote string literals, as long as the same type of quote starts and ends the string.

The triple quotes are used to span the string across multiple lines. For example, all the following are legal −

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

Comments in Python

A hash sign (#) that is not inside a string literal is the beginning of a comment. All characters after the #, up to the end of the physical line, are part of the comment and the Python interpreter ignores them.

#!/usr/bin/python3

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

This produces the following result −

Hello, Python!

You can type a comment on the same line after a statement or expression −

name = "Madisetti" # This is again comment

Python does not have multiple-line commenting feature. You have to comment each line individually as follows −

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

Using Blank Lines

A line containing only whitespace, possibly with a comment, is known as a blank line and Python totally ignores it.

In an interactive interpreter session, you must enter an empty physical line to terminate a multiline statement.

Waiting for the User

The following line of the program displays the prompt and, the statement saying “Press the enter key to exit”, and then waits for the user to take action −

#!/usr/bin/python3

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

Here, "\n\n" is used to create two new lines before displaying the actual line. Once the user presses the key, the program ends. This is a nice trick to keep a console window open until the user is done with an application.

Multiple Statements on a Single Line

The semicolon ( ; ) allows multiple statements on a single line given that no statement starts a new code block. Here is a sample snip using the semicolon −

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

Multiple Statement Groups as Suites

Groups of individual statements, which make a single code block are called suites in Python. Compound or complex statements, such as if, while, def, and class require a header line and a suite.

Header lines begin the statement (with the keyword) and terminate with a colon ( : ) and are followed by one or more lines which make up the suite. For example −

if expression : 
   suite
elif expression : 
   suite 
else : 
   suite

Command Line Arguments

Many programs can be run to provide you with some basic information about how they should be run. Python enables you to do this with -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. ]

You can also program your script in such a way that it should accept various options. Command Line Arguments is an advanced topic. Let us understand it.

Variables are nothing but reserved memory locations to store values. It means that when you create a variable, you reserve some space in the memory.

Based on the data type of a variable, the interpreter allocates memory and decides what can be stored in the reserved memory. Therefore, by assigning different data types to the variables, you can store integers, decimals or characters in these variables.

Assigning Values to Variables

Python variables do not need explicit declaration to reserve memory space. The declaration happens automatically when you assign a value to a variable. The equal sign (=) is used to assign values to variables.

The operand to the left of the = operator is the name of the variable and the operand to the right of the = operator is the value stored in the variable. For example −

#!/usr/bin/python3

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

print (counter)
print (miles)
print (name)

Here, 100, 1000.0 and "John" are the values assigned to counter, miles, and name variables, respectively. This produces the following result −

100
1000.0
John

Multiple Assignment

Python allows you to assign a single value to several variables simultaneously.

For example −

a = b = c = 1

Here, an integer object is created with the value 1, and all the three variables are assigned to the same memory location. You can also assign multiple objects to multiple variables. For example −

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

Here, two integer objects with values 1 and 2 are assigned to the variables a and b respectively, and one string object with the value "john" is assigned to the variable c.

Standard Data Types

The data stored in memory can be of many types. For example, a person's age is stored as a numeric value and his or her address is stored as alphanumeric characters. Python has various standard data types that are used to define the operations possible on them and the storage method for each of them.

Python has five standard data types −

  • Numbers
  • String
  • List
  • Tuple
  • Dictionary

Python Numbers

Number data types store numeric values. Number objects are created when you assign a value to them. For example −

var1 = 1
var2 = 10

You can also delete the reference to a number object by using the del statement. The syntax of the del statement is −

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

You can delete a single object or multiple objects by using the del statement.

For example −

del var
del var_a, var_b

Python supports three different numerical types −

  • int (signed integers)
  • float (floating point real values)
  • complex (complex numbers)

All integers in Python3 are represented as long integers. Hence, there is no separate number type as long.

Examples

Here are some examples of numbers −

int float complex
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

A complex number consists of an ordered pair of real floating-point numbers denoted by x + yj, where x and y are real numbers and j is the imaginary unit.

Python Strings

Strings in Python are identified as a contiguous set of characters represented in the quotation marks. Python allows either pair of single or double quotes. Subsets of strings can be taken using the slice operator ([ ] and [:] ) with indexes starting at 0 in the beginning of the string and working their way from -1 to the end.

The plus (+) sign is the string concatenation operator and the asterisk (*) is the repetition operator. For example −

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

This will produce the following result −

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

Python Lists

Lists are the most versatile of Python's compound data types. A list contains items separated by commas and enclosed within square brackets ([]). To some extent, lists are similar to arrays in C. One of the differences between them is that all the items belonging to a list can be of different data type.

The values stored in a list can be accessed using the slice operator ([ ] and [:]) with indexes starting at 0 in the beginning of the list and working their way to end -1. The plus (+) sign is the list concatenation operator, and the asterisk (*) is the repetition operator. For example −

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

This produces the following result −

['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

A tuple is another sequence data type that is similar to the list. A tuple consists of a number of values separated by commas. Unlike lists, however, tuples are enclosed within parenthesis.

The main difference between lists and tuples are − Lists are enclosed in brackets ( [ ] ) and their elements and size can be changed, while tuples are enclosed in parentheses ( ( ) ) and cannot be updated. Tuples can be thought of as read-only lists. For example −

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

This produces the following result −

('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')

The following code is invalid with tuple, because we attempted to update a tuple, which is not allowed. Similar case is possible with lists −

#!/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 Dictionary

Python's dictionaries are kind of hash-table type. They work like associative arrays or hashes found in Perl and consist of key-value pairs. A dictionary key can be almost any Python type, but are usually numbers or strings. Values, on the other hand, can be any arbitrary Python object.

Dictionaries are enclosed by curly braces ({ }) and values can be assigned and accessed using square braces ([]). For example −

#!/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 produces the following result −

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

Dictionaries have no concept of order among the elements. It is incorrect to say that the elements are "out of order"; they are simply unordered.

Data Type Conversion

Sometimes, you may need to perform conversions between the built-in types. To convert between types, you simply use the type-names as a function.

There are several built-in functions to perform conversion from one data type to another. These functions return a new object representing the converted value.

Sr.No. Function & Description
1

int(x [,base])

Converts x to an integer. The base specifies the base if x is a string.

2

float(x)

Converts x to a floating-point number.

3

complex(real [,imag])

Creates a complex number.

4

str(x)

Converts object x to a string representation.

5

repr(x)

Converts object x to an expression string.

6

eval(str)

Evaluates a string and returns an object.

7

tuple(s)

Converts s to a tuple.

8

list(s)

Converts s to a list.

9

set(s)

Converts s to a set.

10

dict(d)

Creates a dictionary. d must be a sequence of (key,value) tuples.

11

frozenset(s)

Converts s to a frozen set.

12

chr(x)

Converts an integer to a character.

13

unichr(x)

Converts an integer to a Unicode character.

14

ord(x)

Converts a single character to its integer value.

15

hex(x)

Converts an integer to a hexadecimal string.

16

oct(x)

Converts an integer to an octal string.

Operators are the constructs, which can manipulate the value of operands. Consider the expression 4 + 5 = 9. Here, 4 and 5 are called the operands and + is called the operator.

Types of Operator

Python language supports the following types of operators −

  • Arithmetic Operators
  • Comparison (Relational) Operators
  • Assignment Operators
  • Logical Operators
  • Bitwise Operators
  • Membership Operators
  • Identity Operators

Let us have a look at all the operators one by one.

Python Arithmetic Operators

Assume variable a holds the value 10 and variable b holds the value 21, then −

Show Example

Operator Description Example
+ Addition Adds values on either side of the operator. a + b = 31
- Subtraction Subtracts right hand operand from left hand operand. a – b = -11
* Multiplication Multiplies values on either side of the operator a * b = 210
/ Division Divides left hand operand by right hand operand b / a = 2.1
% Modulus Divides left hand operand by right hand operand and returns remainder b % a = 1
** Exponent Performs exponential (power) calculation on operators a**b =10 to the power 20
// Floor Division - The division of operands where the result is the quotient in which the digits after the decimal point are removed. But if one of the operands is negative, the result is floored, i.e., rounded away from zero (towards negative infinity): 9//2 = 4 and 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0

Python Comparison Operators

These operators compare the values on either side of them and decide the relation among them. They are also called Relational operators.

Assume variable a holds the value 10 and variable b holds the value 20, then −

Show Example

Operator Description Example
== If the values of two operands are equal, then the condition becomes true. (a == b) is not true.
!= If values of two operands are not equal, then condition becomes true. (a!= b) is true.
> If the value of left operand is greater than the value of right operand, then condition becomes true. (a > b) is not true.
< If the value of left operand is less than the value of right operand, then condition becomes true. (a < b) is true.
>= If the value of left operand is greater than or equal to the value of right operand, then condition becomes true. (a >= b) is not true.
<= If the value of left operand is less than or equal to the value of right operand, then condition becomes true. (a <= b) is true.

Python Assignment Operators

Assume variable a holds the value 10 and variable b holds the value 20, then −

Show Example

Operator Description Example
= Assigns values from right side operands to left side operand c = a + b assigns value of a + b into c
+= Add AND It adds right operand to the left operand and assign the result to left operand c += a is equivalent to c = c + a
-= Subtract AND It subtracts right operand from the left operand and assign the result to left operand c -= a is equivalent to c = c - a
*= Multiply AND It multiplies right operand with the left operand and assign the result to left operand c *= a is equivalent to c = c * a
/= Divide AND It divides left operand with the right operand and assign the result to left operand c /= a is equivalent to c = c / ac /= a is equivalent to c = c / a
%= Modulus AND It takes modulus using two operands and assign the result to left operand c %= a is equivalent to c = c % a
**= Exponent AND Performs exponential (power) calculation on operators and assign value to the left operand c **= a is equivalent to c = c ** a
//= Floor Division It performs floor division on operators and assign value to the left operand c //= a is equivalent to c = c // a

Python Bitwise Operators

Bitwise operator works on bits and performs bit-by-bit operation. Assume if a = 60; and b = 13; Now in binary format they will be as follows −

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a = 1100 0011

Python's built-in function bin() can be used to obtain binary representation of an integer number.

The following Bitwise operators are supported by Python language −

Show Example

Operator Description Example
& Binary AND Operator copies a bit, to the result, if it exists in both operands (a & b) (means 0000 1100)
| Binary OR It copies a bit, if it exists in either operand. (a | b) = 61 (means 0011 1101)
^ Binary XOR It copies the bit, if it is set in one operand but not both. (a ^ b) = 49 (means 0011 0001)
~ Binary Ones Complement It is unary and has the effect of 'flipping' bits. (~a ) = -61 (means 1100 0011 in 2's complement form due to a signed binary number.
<< Binary Left Shift The left operand's value is moved left by the number of bits specified by the right operand. a << 2 = 240 (means 1111 0000)
>> Binary Right Shift The left operand's value is moved right by the number of bits specified by the right operand. a >> 2 = 15 (means 0000 1111)

Python Logical Operators

The following logical operators are supported by Python language. Assume variable a holds True and variable b holds False then −

Show Example

Operator Description Example
and Logical AND If both the operands are true then condition becomes true. (a and b) is False.
or Logical OR If any of the two operands are non-zero then condition becomes true. (a or b) is True.
not Logical NOT Used to reverse the logical state of its operand. Not(a and b) is True.

Python Membership Operators

Python’s membership operators test for membership in a sequence, such as strings, lists, or tuples. There are two membership operators as explained below −

Show Example

Operator Description Example
in Evaluates to true if it finds a variable in the specified sequence and false otherwise. x in y, here in results in a 1 if x is a member of sequence y.
not in Evaluates to true if it does not finds a variable in the specified sequence and false otherwise. x not in y, here not in results in a 1 if x is not a member of sequence y.

Python Identity Operators

Identity operators compare the memory locations of two objects. There are two Identity operators as explained below −

Show Example

Operator Description Example
is Evaluates to true if the variables on either side of the operator point to the same object and false otherwise. x is y, here is results in 1 if id(x) equals id(y).
is not Evaluates to false if the variables on either side of the operator point to the same object and true otherwise. x is not y, here is not results in 1 if id(x) is not equal to id(y).

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

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

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

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

**

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

2

~ + -

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

3

* / % //

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

4

+ -

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

5

>> <<

Поразрядный сдвиг вправо и влево

6

&

Побитовое "И"

7

^ |

Побитовое исключающее `ИЛИ 'и обычное` ИЛИ'

8

<= < > >=

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

9

<> == !=

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

10

= %= /= //= -= += *= **=

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

11

is is not

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

12

in not in

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

13

not or and

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

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

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

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

Язык программирования Python предполагает любые non-zero и non-null значения как ИСТИНА, и любые zero или же null values как значение ЛОЖЬ.

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

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

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

2 если ... еще утверждения

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

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

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

Давайте быстро рассмотрим каждое заявление о принятии решений.

Люкс Single Statement

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

пример

Вот пример one-line if пункт -

#!/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 предоставляет следующие типы циклов для обработки требований цикла.

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

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

2 для цикла

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

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

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

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

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

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

Sr.No. Положение и описание управления
1 заявление о прерывании

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

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

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

3 заявление о прохождении

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

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

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

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

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

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

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

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

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

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

var1 = 1
var2 = 10

Вы также можете удалить ссылку на числовой объект, используя delзаявление. Синтаксисdel заявление -

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

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

del var
del var_a, var_b

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

  • int (signed integers) - Их часто называют просто целыми числами или ints. Это положительные или отрицательные целые числа без десятичной точки. Целые числа в Python 3 имеют неограниченный размер. Python 2 имеет два целочисленных типа - int и long. Здесь нет 'long integer'в Python 3 больше.

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

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

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

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

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

Примеры

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

int плавать сложный
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. x и y - числовые выражения

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

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

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

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

2 ceil (x)

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

3

cmp(x, y)

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

4 ехр (х)

Экспонента от x: e x

5 фабрики (х)

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

6 этаж (x)

Пол x: наибольшее целое число, не превышающее x.

7 журнал (х)

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

8 log10 (x)

Логарифм x по основанию 10 для x> 0.

9 макс (x1, x2, ...)

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

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

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

11 modf (x)

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

12 pow (x, y)

Значение x ** y.

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

xокругляется до n знаков после запятой. Python округляет от нуля как решающий фактор: round (0,5) равен 1,0, а round (-0,5) равен -1,0.

14 sqrt (х)

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

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

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

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

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

2 randrange ([начало,] стоп [, шаг])

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

3 случайный ()

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

4 семя ([x])

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

5 перемешать (lst)

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

6 равномерное (x, y)

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

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

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

Sr.No. Описание функции
1 acos (x)

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

2 asin (х)

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

3 атан (х)

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

4 atan2 (у, х)

Возвращает atan (y / x) в радианах.

5 cos (x)

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

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

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

7 грех (х)

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

8 загар (х)

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

9 градусы (х)

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

10 радианы (х)

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

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

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

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

pi

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

2

e

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

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

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

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

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

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

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

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

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

#!/usr/bin/python3

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

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

Updated String :-  Hello Python

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

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

Интерпретируется escape-символ; в строках с одинарными или двойными кавычками.

Обозначение обратной косой черты Шестнадцатеричный символ Описание
\ а 0x07 Звонок или тревога
\ b 0x08 Backspace
\ cx Ctrl-x
\ Cx Ctrl-x
\ е 0x1b Побег
\ f 0x0c Formfeed
\ M- \ Cx Мета-Control-x
\ п 0x0a Новая линия
\ nnn Восьмеричная запись, где n находится в диапазоне 0,7
0x0d Возврат каретки
\ s 0x20 Космос
\ т 0x09 Вкладка
\ v 0x0b Вертикальная табуляция
\Икс Символ x
\ xnn Шестнадцатеричное представление, где n находится в диапазоне 0,9, af или AF.

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

Предположим строковую переменную a содержит 'Hello' и переменную b держит Python, тогда -

Оператор Описание пример
+ Конкатенация - добавляет значения по обе стороны от оператора. a + b даст HelloPython
* Повторение - создает новые строки, объединяя несколько копий одной и той же строки. a * 2 передаст -HelloHello
[] Slice - дает символ из указанного индекса a [1] даст e
[:] Range Slice - дает символы из заданного диапазона a [1: 4] даст ell
в Членство - возвращает истину, если в данной строке существует символ. H в a даст 1
не в Членство - возвращает истину, если символ не существует в данной строке. M не в a даст 1
r / R Необработанная строка - подавляет фактическое значение escape-символов. Синтаксис необработанных строк точно такой же, как и для обычных строк, за исключением оператора необработанной строки, буквы «r», которая стоит перед кавычками. Буква «r» может быть в нижнем (r) или верхнем регистре (R) и должна быть помещена непосредственно перед первой кавычкой. print r '\ n' печатает \ n и печатает R '\ n'печатает \ n
% Формат - выполняет форматирование строки См. Следующий раздел

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

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

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

%c

персонаж

2

%s

преобразование строки с помощью str () до форматирования

3

%i

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

4

%d

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

5

%u

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

6

%o

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

7

%x

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

8

%X

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

9

%e

экспоненциальная запись (со строчной буквой "е")

10

%E

экспоненциальная запись (с заглавными буквами 'E')

11

%f

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

12

%g

короче из% f и% e

13

%G

короче из% f и% E

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

Sr.No. Символ и функции
1

*

аргумент определяет ширину или точность

2

-

левое выравнивание

3

+

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

4

<sp>

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

5

#

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

6

0

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

7

%

'%%' оставляет вам единственный буквальный '%'

8

(var)

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

9

m.n.

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

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

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

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

#!/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.

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

#!/usr/bin/python3

print ('C:\\nowhere')

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

C:\nowhere

Теперь воспользуемся сырой строкой. Мы бы выразилисьr'expression' следующим образом -

#!/usr/bin/python3

print (r'C:\\nowhere')

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

C:\\nowhere

Строка Юникода

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

Встроенные строковые методы

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

Sr.No. Методы и описание
1 капитализировать ()

Делает первую букву строки заглавной

2 центр (ширина, fillchar)

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

3 count (str, begin = 0, end = len (строка))

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

4 декодировать (кодировка = 'UTF-8', ошибки = 'строгий')

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

5 кодировать (кодировка = 'UTF-8', errors = 'strict')

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

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

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

7 expandtabs (tabsize = 8)

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

8 найти (str, begin = 0 end = len (строка))

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

9 index (str, begin = 0, end = len (строка))

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

10 isalnum ()

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

11 isalpha ()

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

12 isdigit ()

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

13 islower ()

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

14 isnumeric ()

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

15 isspace ()

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

16 istitle ()

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

17 isupper ()

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

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

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

19 len (строка)

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

20 ljust (ширина [, fillchar])

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

21 год нижний ()

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

22 lstrip ()

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

23 макетранс ()

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

24 макс (стр)

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

25 мин (ул)

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

26 replace (old, new [, max])

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

27 rfind (str, begin = 0, end = len (строка))

То же, что и find (), но поиск по строке в обратном направлении.

28 rindex (str, begin = 0, end = len (строка))

То же, что index (), но поиск по строке в обратном направлении.

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

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

30 rstrip ()

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

31 год split (str = "", num = string.count (str))

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

32 splitlines (num = string.count ('\ n'))

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

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

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

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

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

35 год swapcase ()

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

36 заглавие()

Возвращает "заглавную" версию строки, то есть все слова начинаются с верхнего регистра, а остальные - с нижнего.

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

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

38 верхний ()

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

39 zfill (ширина)

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

40 isdecimal ()

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

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

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

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

Списки Python

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

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

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

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

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

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

#!/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 (). Например -

#!/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])

Note - Метод append () обсуждается в следующем разделе.

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

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

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

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

#!/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]

Note - метод 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 len (список)

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

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

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

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

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

4 список (seq)

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

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

Sr.No. Методы и описание
1 list.append (объект)

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

2 list.count (объект)

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

3 list.extend (seq)

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

4 list.index (объект)

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

5 list.insert (индекс, объект)

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

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

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

7 list.remove (объект)

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

8 list.reverse ()

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

9 list.sort ([функция])

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

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

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

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

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

tup1 = ();

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

tup1 = (50,)

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

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

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

#!/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)

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

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

#!/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)

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

Note- Возникло исключение. Это потому, что после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 Полученные результаты Описание
Т [2] 'Python' Смещения начинаются с нуля
Т [-2] 'Ява' Отрицательный: считайте справа
Т [1:] ("Java", "Python") Нарезка извлекает разделы

Без ограничивающих рамок

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

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

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

Sr.No. Описание функции
1 cmp (кортеж1, кортеж2)

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

2 len (кортеж)

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

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

Returns item from the tuple with max value.

4 min(tuple)

Returns item from the tuple with min value.

5 tuple(seq)

Converts a list into tuple.

Each key is separated from its value by a colon (:), the items are separated by commas, and the whole thing is enclosed in curly braces. An empty dictionary without any items is written with just two curly braces, like this: {}.

Keys are unique within a dictionary while values may not be. The values of a dictionary can be of any type, but the keys must be of an immutable data type such as strings, numbers, or tuples.

Accessing Values in Dictionary

To access dictionary elements, you can use the familiar square brackets along with the key to obtain its value. Following is a simple example −

#!/usr/bin/python3

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

When the above code is executed, it produces the following result −

dict['Name']:  Zara
dict['Age']:  7

If we attempt to access a data item with a key, which is not a part of the dictionary, we get an error as follows −

#!/usr/bin/python3

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

When the above code is executed, it produces the following result −

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

Updating Dictionary

You can update a dictionary by adding a new entry or a key-value pair, modifying an existing entry, or deleting an existing entry as shown in a simple example given below.

#!/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'])

When the above code is executed, it produces the following result −

dict['Age']:  8
dict['School']:  DPS School

Delete Dictionary Elements

You can either remove individual dictionary elements or clear the entire contents of a dictionary. You can also delete entire dictionary in a single operation.

To explicitly remove an entire dictionary, just use the del statement. Following is a simple example −

#!/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'])

This produces the following result.

An exception is raised because after del dict, the dictionary does not exist anymore.

dict['Age']:
Traceback (most recent call last):
   File "test.py", line 8, in <module>
      print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

Note − The del() method is discussed in subsequent section.

Properties of Dictionary Keys

Dictionary values have no restrictions. They can be any arbitrary Python object, either standard objects or user-defined objects. However, same is not true for the keys.

There are two important points to remember about dictionary keys −

(a) More than one entry per key is not allowed. This means no duplicate key is allowed. When duplicate keys are encountered during assignment, the last assignment wins. For example −

#!/usr/bin/python3

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

When the above code is executed, it produces the following result −

dict['Name']:  Manni

(b) Keys must be immutable. This means you can use strings, numbers or tuples as dictionary keys but something like ['key'] is not allowed. Following is a simple example −

#!/usr/bin/python3

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

When the above code is executed, it produces the following result −

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      dict = {['Name']: 'Zara', 'Age': 7}
TypeError: list objects are unhashable

Built-in Dictionary Functions and Methods

Python includes the following dictionary functions −

Sr.No. Function & Description
1 cmp(dict1, dict2)

No longer available in Python 3.

2 len(dict)

Gives the total length of the dictionary. This would be equal to the number of items in the dictionary.

3 str(dict)

Produces a printable string representation of a dictionary

4 type(variable)

Returns the type of the passed variable. If passed variable is dictionary, then it would return a dictionary type.

Python includes the following dictionary methods −

Sr.No. Method & Description
1 dict.clear()

Removes all elements of dictionary dict

2 dict.copy()

Returns a shallow copy of dictionary dict

3 dict.fromkeys()

Create a new dictionary with keys from seq and values set to value.

4 dict.get(key, default=None)

For key key, returns value or default if key not in dictionary

5 dict.has_key(key)

Removed, use the in operation instead.

6 dict.items()

Returns a list of dict's (key, value) tuple pairs

7 dict.keys()

Returns list of dictionary dict's keys

8 dict.setdefault(key, default = None)

Similar to get(), but will set dict[key] = default if key is not already in dict

9 dict.update(dict2)

Adds dictionary dict2's key-values pairs to dict

10 dict.values()

Returns list of dictionary dict's values

A Python program can handle date and time in several ways. Converting between date formats is a common chore for computers. Python's time and calendar modules help track dates and times.

What is Tick?

Time intervals are floating-point numbers in units of seconds. Particular instants in time are expressed in seconds since 12:00am, January 1, 1970(epoch).

There is a popular time module available in Python which provides functions for working with times, and for converting between representations. The function time.time() returns the current system time in ticks since 12:00am, January 1, 1970(epoch).

Example

#!/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)

This would produce a result something as follows −

Number of ticks since 12:00am, January 1, 1970: 1455508609.34375

Date arithmetic is easy to do with ticks. However, dates before the epoch cannot be represented in this form. Dates in the far future also cannot be represented this way - the cutoff point is sometime in 2038 for UNIX and Windows.

What is TimeTuple?

Many of the Python's time functions handle time as a tuple of 9 numbers, as shown below −

Index Field Values
0 4-digit year 2016
1 Month 1 to 12
2 Day 1 to 31
3 Hour 0 to 23
4 Minute 0 to 59
5 Second 0 to 61 (60 or 61 are leap-seconds)
6 Day of Week 0 to 6 (0 is Monday)
7 Day of year 1 to 366 (Julian day)
8 Daylight savings -1, 0, 1, -1 means library determines DST

For Example −

import time

print (time.localtime());

This would produce a result as follows −

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)

The above tuple is equivalent to struct_time structure. This structure has following attributes −

Index Attributes Values
0 tm_year 2016
1 tm_mon 1 to 12
2 tm_mday 1 to 31
3 tm_hour 0 to 23
4 tm_min 0 to 59
5 tm_sec 0 to 61 (60 or 61 are leap-seconds)
6 tm_wday 0 to 6 (0 is Monday)
7 tm_yday 1 to 366 (Julian day)
8 tm_isdst -1, 0, 1, -1 means library determines DST

Getting current time

To translate a time instant from seconds since the epoch floating-point value into a timetuple, pass the floating-point value to a function (e.g., localtime) that returns a time-tuple with all valid nine items.

#!/usr/bin/python3
import time

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

This would produce the following result, which could be formatted in any other presentable form −

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)

Getting formatted time

You can format any time as per your requirement, but a simple method to get time in a readable format is asctime()

Живая демонстрация
#!/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 г.) -

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

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

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

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

Смещение местного часового пояса DST в секундах к западу от UTC, если таковой определен. Это отрицательно, если местный часовой пояс DST находится к востоку от UTC (как в Западной Европе, включая Великобританию). Используйте это, если дневной свет отличен от нуля.

2 time.asctime ([время кортежа])

Принимает кортеж времени и возвращает читаемую 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, в зависимости от того, применяется ли летнее время к мгновенным секундам по местным правилам).

7 time.mktime (время кортежа)

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

8 time.sleep (сек)

Приостанавливает вызывающий поток на несколько секунд.

9 time.strftime (fmt [, время кортежа])

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

10 time.strptime (str, fmt = '% a% b% d% H:% M:% S% Y')

Анализирует str в соответствии со строкой формата fmt и возвращает момент времени в формате кортежа времени.

11 time.time ()

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

12 time.tzset ()

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

В модуле времени доступны два важных атрибута. Они -

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

time.timezone

Атрибут time.timezone - это смещение в секундах местного часового пояса (без летнего времени) от UTC (> 0 в Северной и Южной Америке; <= 0 в большинстве стран Европы, Азии и Африки).

2

time.tzname

Атрибут time.tzname - это пара строк, зависящих от локали, которые представляют собой названия местного часового пояса без летнего времени и с летним временем соответственно.

Модуль календаря

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

По умолчанию в календаре понедельник является первым днем ​​недели, а воскресенье - последним. Чтобы изменить это, вызовитеcalendar.setfirstweekday() функция.

Вот список функций, доступных с calendar модуль -

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

calendar.calendar(year,w = 2,l = 1,c = 6)

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

2

calendar.firstweekday( )

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

3

calendar.isleap(year)

Возвращает True, если год високосный; в противном случае - False.

4

calendar.leapdays(y1,y2)

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

5

calendar.month(year,month,w = 2,l = 1)

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

6

calendar.monthcalendar(year,month)

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

7

calendar.monthrange(year,month)

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

8

calendar.prcal(year,w = 2,l = 1,c = 6)

Как print calendar.calendar (год, ш, л, в).

9

calendar.prmonth(year,month,w = 2,l = 1)

Как print calendar.month (год, месяц, w, l).

10

calendar.setfirstweekday(weekday)

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

11

calendar.timegm(tupletime)

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

12

calendar.weekday(year,month,day)

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

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

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

  • Модуль datetime
  • Модуль pytz
  • Модуль dateutil

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

Как вы уже знаете, Python предоставляет множество встроенных функций, таких как print () и т. Д., Но вы также можете создавать свои собственные функции. Эти функции называются пользовательскими функциями.

Определение функции

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

  • Функциональные блоки начинаются с ключевого слова 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() функция -

#!/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 передаются по ссылке. Это означает, что если вы изменяете то, на что ссылается параметр в функции, это изменение также отражается в вызывающей функции. Например -

#!/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]

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

#!/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(), вам обязательно нужно передать один аргумент, иначе это даст следующую синтаксическую ошибку:

#!/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() функционируют следующими способами -

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

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

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

Аргументы по умолчанию

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

#!/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]

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

#!/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 ++, целью которых является выделение памяти в стеке путем передачи функции во время вызова из соображений производительности.

Синтаксис

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

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

Ниже приведен пример, показывающий, как lambda форма работы -

#!/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.

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

#!/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 есть две основные области переменных:

  • Глобальные переменные
  • Локальные переменные

Глобальные и локальные переменные

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

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

#!/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. Группирование связанного кода в модуль упрощает понимание и использование кода. Модуль - это объект Python с произвольно названными атрибутами, которые можно связывать и ссылаться.

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

пример

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

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

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

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

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

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

Заявление from ... import

Python fromоператор позволяет импортировать определенные атрибуты из модуля в текущее пространство имен. Вfrom...import имеет следующий синтаксис -

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 в глобальную таблицу символов импортирующего модуля.

Оператор from ... import *

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

from modname import *

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

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

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

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

#!/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 /.

Путь поиска модуля хранится в системном модуле 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 прекращает поиск переменной в локальном пространстве имен.

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

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

#!/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 () возвращает отсортированный список строк, содержащих имена, определенные модулем.

Список содержит имена всех модулей, переменных и функций, определенных в модуле. Ниже приводится простой пример -

#!/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 ()

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

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

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

Тип возврата обеих этих функций - словарь. Следовательно, имена можно извлекать с помощьюkeys() функция.

Функция reload ()

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

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

reload(module_name)

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

reload(hello)

Пакеты на Python

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

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

#!/usr/bin/python3

def Pots():
print ("I'm Pots Phone")

Аналогично, у нас есть два других файла с разными функциями с тем же именем, что и выше. Они -

  • Файл Phone / Isdn.py с функцией Isdn ()

  • Файл Phone / G3.py с функцией G3 ()

Теперь создайте еще один файл __init__.py в каталоге телефона -

  • Phone/__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.

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

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

#!/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, за исключением того, что она предполагает, что ввод является допустимым выражением 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 предоставляет базовые функции и методы, необходимые для управления файлами по умолчанию. Вы можете выполнять большую часть операций с файлами, используяfile объект.

Открытая функция

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

Синтаксис

file object = open(file_name [, access_mode][, buffering])

Вот подробности о параметрах -

  • file_name - Аргумент имя_файла - это строковое значение, содержащее имя файла, к которому вы хотите получить доступ.

  • access_mode- Access_mode определяет режим, в котором файл должен быть открыт, то есть чтение, запись, добавление и т. Д. Полный список возможных значений приведен ниже в таблице. Это необязательный параметр, и режим доступа к файлу по умолчанию - чтение (r).

  • buffering- Если значение буферизации установлено на 0, буферизация не выполняется. Если значение буферизации равно 1, буферизация строки выполняется при доступе к файлу. Если вы задаете значение буферизации как целое число больше 1, то действие буферизации выполняется с указанным размером буфера. Если отрицательный, размер буфера является системным по умолчанию (поведение по умолчанию).

Вот список различных режимов открытия файла -

Sr.No. Режим и описание
1

r

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

2

rb

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

3

r+

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

4

rb+

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

5

w

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

6

wb

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

7

w+

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

8

wb+

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

9

a

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

10

ab

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

11

a+

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

12

ab+

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

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

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

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

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

file.closed

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

2

file.mode

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

3

file.name

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

Note - атрибут softspace не поддерживается в Python 3.x

пример

#!/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();

пример

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

В 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 ()

Вы можете использовать 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")

пример

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

#!/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. Они следующие -

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

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

  • Методы объектов ОС

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

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

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

  • Assertions- Это будет рассмотрено в учебнике Утверждения в Python 3 .

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

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

Sr.No. Имя и описание исключения
1

Exception

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

2

StopIteration

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

3

SystemExit

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

4

StandardError

Базовый класс для всех встроенных исключений, кроме 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

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

21 год

OSError

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

22

SyntaxError

Возникает, когда в синтаксисе Python есть ошибка.

23

IndentationError

Возникает, если отступ не указан правильно.

24

SystemError

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

25

SystemExit

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

26

TypeError

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

27

ValueError

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

28

RuntimeError

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

29

NotImplementedError

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

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

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

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

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

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

Заявление assert

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

Синтаксис assert -

assert Expression[, Arguments]

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

пример

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

#!/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: включитеexcept: оператор, за которым следует блок кода, который решает проблему максимально элегантно.

Синтаксис

Вот простой синтаксис блоков try .... except ... 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 может быть несколько операторов except. Это полезно, когда блок try содержит инструкции, которые могут вызывать различные типы исключений.

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

  • После предложений except вы можете включить else-clause. Код в блоке else выполняется, если код в блоке try: не вызывает исключения.

  • Блок else - хорошее место для кода, который не нуждается в защите try: block.

пример

Этот пример открывает файл, записывает содержимое в файл и выходит изящно, потому что вообще нет никаких проблем -

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

пример

В этом примере пытается открыть файл, в котором у вас нет разрешения на запись, поэтому возникает исключение -

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

Пункт except без исключений

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

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-exceptоператор перехватывает все возникающие исключения. Однако использование такого оператора try-except не считается хорошей практикой программирования, поскольку он улавливает все исключения, но не заставляет программиста идентифицировать основную причину проблемы, которая может возникнуть.

Предложение except с несколькими исключениями

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

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:block - это место для размещения любого кода, который должен выполняться, независимо от того, вызвал ли блок try исключение или нет. Синтаксис оператора try-finally следующий:

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

Note- Вы можете указать пункты except или finally, но не оба сразу. Вы не можете использовать предложение else вместе с предложением finally.

пример

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

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

#!/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 исключение возникает снова и обрабатывается в операторах except, если они присутствуют на следующем более высоком уровне оператора try-except .

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

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

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

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

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

пример

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

#!/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. Общий синтаксис дляraise заявление выглядит следующим образом -

Синтаксис

raise [Exception [, args [, traceback]]]

Здесь Exception - это тип исключения (например, NameError), а arguments - значение аргумента исключения. Аргумент не обязателен; если не указан, аргумент исключения - Нет.

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

пример

Исключением может быть строка, класс или объект. Большинство исключений, которые вызывает ядро ​​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

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

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

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

#!/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 вызывается определенное пользователем исключение и перехватывается в блоке except. Переменная e используется для создания экземпляра класса Networkerror .

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

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

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print e.args

Python был объектно-ориентированным языком с тех пор, как он существовал. Благодаря этому создавать и использовать классы и объекты совершенно несложно. Эта глава поможет вам стать экспертом в использовании поддержки объектно-ориентированного программирования Python.

Если у вас нет опыта объектно-ориентированного программирования (ОО), возможно, вы захотите проконсультироваться с вводным курсом по нему или, по крайней мере, с каким-либо учебным пособием, чтобы получить представление об основных концепциях.

Однако вот небольшое введение в объектно-ориентированное программирование (ООП), которое поможет вам:

Обзор терминологии ООП

  • Class- Определяемый пользователем прототип объекта, который определяет набор атрибутов, характеризующих любой объект класса. Атрибуты - это члены данных (переменные класса и переменные экземпляра) и методы, доступ к которым осуществляется через точечную нотацию.

  • Class variable- Переменная, общая для всех экземпляров класса. Переменные класса определены внутри класса, но вне его методов. Переменные класса используются не так часто, как переменные экземпляра.

  • Data member - Переменная класса или переменная экземпляра, которая содержит данные, связанные с классом и его объектами.

  • Function overloading- Назначение более чем одного поведения определенной функции. Выполняемая операция зависит от типов задействованных объектов или аргументов.

  • Instance variable - Переменная, которая определяется внутри метода и принадлежит только текущему экземпляру класса.

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

  • Instance- Индивидуальный объект определенного класса. Например, объект obj, принадлежащий классу Circle, является экземпляром класса Circle.

  • Instantiation - Создание экземпляра класса.

  • Method - Особый вид функции, которая определяется в определении класса.

  • Object- Уникальный экземпляр структуры данных, который определяется ее классом. Объект включает как элементы данных (переменные класса и переменные экземпляра), так и методы.

  • Operator overloading - Назначение более одной функции одному оператору.

Создание классов

Оператор класса создает новое определение класса. Имя класса следует сразу за ключевым словом class, за которым следует двоеточие:

class ClassName:
   'Optional class documentation string'
   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 в список за вас; вам не нужно включать его при вызове методов.

Создание экземпляров объектов

Чтобы создать экземпляры класса, вы вызываете класс, используя имя класса, и передаете любые аргументы, которые принимает его метод __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)

Теперь, объединяя все концепции -

#!/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) - удалить атрибут.

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__ - Возможно, пустой кортеж, содержащий базовые классы, в порядке их появления в списке базовых классов.

Для вышеуказанного класса давайте попробуем получить доступ ко всем этим атрибутам -

#!/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 __ () печатает имя класса экземпляра, который вот-вот будет уничтожен -

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

Note- В идеале вы должны определить свои классы в отдельном файле, а затем импортировать их в основной файл программы с помощью оператора импорта .

В приведенном выше примере предполагается, что определение класса Point содержится в point.py и в нем нет другого исполняемого кода.

#!/usr/bin/python3
import point

p1 = point.Point()

Наследование класса

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

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

Синтаксис

Производные классы объявляются так же, как их родительский класс; однако список базовых классов для наследования дается после имени класса -

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

пример

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

Переопределение методов

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

пример

#!/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__( self )

Деструктор, удаляет объект

Пример вызова: del obj

3

__repr__( self )

Оцениваемое строковое представление

Пример вызова: repr (obj)

4

__str__( self )

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

Пример вызова: str (obj)

5

__cmp__ ( self, x )

Сравнение объектов

Пример вызова: cmp (obj, x)

Операторы перегрузки

Предположим, вы создали класс Vector для представления двумерных векторов. Что произойдет, если вы добавите их с помощью оператора «плюс»? Скорее всего Python на вас накричит.

Однако вы можете определить метод __add__ в своем классе для выполнения сложения векторов, и тогда оператор плюс будет вести себя так, как ожидалось -

пример

#!/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)

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

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

пример

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

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

Модуль reобеспечивает полную поддержку регулярных выражений, подобных Perl, в Python. Вre модуль вызывает исключение re.error если ошибка возникает при компиляции или использовании регулярного выражения.

Мы рассмотрим две важные функции, которые будут использоваться для обработки регулярных выражений. Тем не менее, сначала небольшая вещь: существуют различные символы, которые будут иметь особое значение при использовании в регулярном выражении. Чтобы избежать путаницы при работе с регулярными выражениями, мы будем использовать Raw Strings какr'expression'.

Основные шаблоны, соответствующие одиночным символам

Sr.No. Выражение и совпадения
1

a, X, 9, <

обычные персонажи просто точно соответствуют себе.

2

. (a period)

соответствует любому одиночному символу, кроме новой строки '\ n'

3

\w

соответствует символу "слова": букве, цифре или подчеркиванию [a-zA-Z0-9_].

4

\W

соответствует любому символу, не являющемуся словом.

5

\b

граница между словом и не словом

6

\s

соответствует одному пробельному символу - пробел, новая строка, возврат, табуляция

7

\S

соответствует любому непробельному символу.

8

\t, \n, \r

вкладка, новая строка, возврат

9

\d

десятичная цифра [0-9]

10

^

соответствует началу строки

11

$

соответствовать концу строки

12

\

подавлять «особенность» персонажа.

Флаги компиляции

Флаги компиляции позволяют изменять некоторые аспекты работы регулярных выражений. Флаги доступны в модуле re под двумя именами, одним длинным именем, напримерIGNORECASE и короткая однобуквенная форма, например I.

Sr.No. Флаг и значение
1

ASCII, A

Делает несколько экранированных символов, например \ w, \ b, \ s и \ d, совпадающими только с символами ASCII с соответствующим свойством.

2

DOTALL, S

Сделайте, сопоставьте любой символ, включая символы новой строки

3

IGNORECASE, I

Делать совпадения без учета регистра

4

LOCALE, L

Сделайте соответствие с учетом локали

5

MULTILINE, M

Многострочное сопоставление, затрагивающее ^ и $

6

VERBOSE, X (for ‘extended’)

Включите подробные RE, которые могут быть организованы более четко и понятно

Функция соответствия

Эта функция пытается сопоставить шаблон RE со строкой с необязательными флагами .

Вот синтаксис этой функции -

re.match(pattern, string, flags = 0)

Вот описание параметров -

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

pattern

Это регулярное выражение, которое нужно сопоставить.

2

string

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

3

flags

Вы можете указать разные флаги, используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

Функция re.match возвращаетmatch объект на успех, Noneпри неудаче. Мы используем функцию group (num) или groups () отmatch объект, чтобы получить совпадающее выражение.

Sr.No. Метод сопоставления объекта и описание
1

group(num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

groups()

Этот метод возвращает все подходящие подгруппы в кортеже (пустые, если их не было)

пример

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

pattern

Это регулярное выражение, которое нужно сопоставить.

2

string

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

3

flags

Вы можете указать разные флаги, используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

Функция re.search возвращаетmatch объект на успех, noneпри неудаче. Мы используем функцию group (num) или groups () отmatch объект, чтобы получить совпадающее выражение.

Sr.No. Метод сопоставления объекта и описание
1

group(num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

groups()

Этот метод возвращает все подходящие подгруппы в кортеже (пустые, если их не было)

пример

#!/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 предлагает две разные примитивные операции, основанные на регулярных выражениях: match проверяет совпадение только в начале строки, а search проверяет совпадение в любом месте строки (это то, что Perl делает по умолчанию).

пример

#!/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 . Этот метод возвращает измененную строку.

пример

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

Разрешает «более привлекательный» синтаксис регулярных выражений. Он игнорирует пробелы (кроме внутри набора [] или экранированных обратной косой чертой) и обрабатывает неэкранированный # как маркер комментария.

Шаблоны регулярных выражений

За исключением управляющих символов, (+ ? . * ^ $ ( ) [ ] { } | \), все символы совпадают. Вы можете экранировать управляющий символ, поставив перед ним обратную косую черту.

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

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

^

Соответствует началу строки.

2

$

Соответствует концу строки.

3

.

Соответствует любому одиночному символу, кроме новой строки. Использование опции m также позволяет сопоставить новую строку.

4

[...]

Соответствует любому одиночному символу в скобках.

5

[^...]

Соответствует любому одиночному символу не в скобках

6

re*

Соответствует 0 или более вхождениям предыдущего выражения.

7

re+

Соответствует одному или нескольким вхождениям предыдущего выражения.

8

re?

Соответствует 0 или 1 вхождению предыдущего выражения.

9

re{ n}

Соответствует ровно n повторениям предыдущего выражения.

10

re{ n,}

Соответствует n или нескольким вхождениям предыдущего выражения.

11

re{ n, m}

Соответствует как минимум n и максимум m вхождениям предыдущего выражения.

12

a|b

Соответствует либо a, либо b.

13

(re)

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

14

(?imx)

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

15

(?-imx)

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

16

(?: re)

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

17

(?imx: re)

Временно переключает параметры i, m или x в скобках.

18

(?-imx: re)

Временно отключает параметры i, m или x в скобках.

19

(?#...)

Комментарий.

20

(?= re)

Определяет положение с помощью шаблона. Не имеет диапазона.

21 год

(?! re)

Определяет позицию с использованием отрицания шаблона. Не имеет диапазона.

22

(?> re)

Соответствует независимому шаблону без возврата.

23

\w

Соответствует символам слова.

24

\W

Соответствует несловесным символам.

25

\s

Соответствует пробелу. Эквивалентно [\ t \ n \ r \ f].

26

\S

Соответствует пробелам.

27

\d

Соответствует цифрам. Эквивалентно [0-9].

28

\D

Соответствует нецифровым значениям.

29

\A

Соответствует началу строки.

30

\Z

Соответствует концу строки. Если новая строка существует, она соответствует непосредственно перед новой строкой.

31 год

\z

Соответствует концу строки.

32

\G

Место, где закончился последний матч.

33

\b

Соответствует границам слова вне скобок. Соответствует пробелу (0x08) внутри скобок.

34

\B

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

35 год

\n, \t, etc.

Соответствует символам новой строки, возврата каретки, табуляции и т. Д.

36

\1...\9

Соответствует n-му сгруппированному подвыражению.

37

\10

Соответствует n-му сгруппированному подвыражению, если оно уже совпало. В противном случае относится к восьмеричному представлению символьного кода.

Примеры регулярных выражений

Буквальные символы

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

python

Матч «питон».

Классы персонажей

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

[Pp]ython

Соответствие "Python" или "python"

2

rub[ye]

Матч «рубин» или «рубин»

3

[aeiou]

Соответствует любой гласной в нижнем регистре

4

[0-9]

Соответствует любой цифре; то же, что и [0123456789]

5

[a-z]

Соответствует любой строчной букве ASCII

6

[A-Z]

Соответствует любой заглавной букве ASCII

7

[a-zA-Z0-9]

Соответствует любому из вышеперечисленных

8

[^aeiou]

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

9

[^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

\w

Соответствует символу из одного слова: [A-Za-z0-9_]

7

\W

Соответствует символу, не являющемуся словом: [^ A-Za-z0-9_]

Случаи повторения

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

ruby?

Сопоставьте "rub" или "ruby": y необязательно

2

ruby*

Матч "руб" плюс 0 или более лет

3

ruby+

Матч "руб" плюс 1 или более лет

4

\d{3}

Соответствует ровно 3 цифрам

5

\d{3,}

Соответствие 3 или более цифрам

6

\d{3,5}

Соответствие 3, 4 или 5 цифрам

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

Это соответствует наименьшему количеству повторений -

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

<.*>

Жадное повторение: соответствует "<python> perl>"

2

<.*?>

Nongreedy: соответствует "<python>" в "<python> perl>"

Группировка с круглыми скобками

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

\D\d+

Нет группы: + повторяет \ d

2

(\D\d)+

Сгруппировано: + повторяет пару \ D \ d

3

([Pp]ython(,)?)+

Соответствие «Python», «Python, python, python» и т. Д.

Обратные ссылки

Это снова соответствует ранее подобранной группе -

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

([Pp])ython&\1ails

Сопоставьте питон и ведра или Python и ведра

2

(['"])[^\1]*\1

Строка в одинарных или двойных кавычках. \ 1 соответствует тому, что соответствует первой группе. \ 2 соответствует тому, что соответствует второй группе и т. Д.

Альтернативы

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

python|perl

Матч "питон" или "перл"

2

rub(y|le)

Матч «рубин» или «рубль»

3

Python(!+|\?)

"Python", за которым следует один или несколько! или один?

Якоря

Здесь необходимо указать позицию совпадения.

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

^Python

Соответствует "Python" в начале строки или внутренней строки

2

Python$

Соответствует "Python" в конце строки или строки

3

\APython

Соответствует "Python" в начале строки

4

Python\Z

Соответствует "Python" в конце строки

5

\bPython\b

Соответствие "Python" на границе слова

6

\brub\B

\ B не является границей слова: сопоставьте «rub» с «rube» и «ruby», но не только

7

Python(?=!)

Соответствует «Python», если после него стоит восклицательный знак.

8

Python(?!!)

Соответствует «Python», если после него не стоит восклицательный знак.

Специальный синтаксис с круглыми скобками

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

R(?#comment)

Матчи «Р». Все остальное - комментарий

2

R(?i)uby

Без учета регистра при сопоставлении "uby"

3

R(?i:uby)

То же, что и выше

4

rub(?:y|le))

Группировать только без создания обратной ссылки \ 1

Общий интерфейс шлюза или CGI - это набор стандартов, которые определяют, как происходит обмен информацией между веб-сервером и настраиваемым сценарием. Спецификации CGI в настоящее время поддерживаются NCSA.

Что такое CGI?

  • Общий интерфейс шлюза, или CGI, является стандартом для программ внешнего шлюза для взаимодействия с информационными серверами, такими как серверы HTTP.

  • Текущая версия - CGI / 1.1, а CGI / 1.2 находится в стадии разработки.

Просмотр веб-страниц

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

  • Ваш браузер связывается с веб-сервером HTTP и запрашивает URL-адрес, то есть имя файла.

  • Веб-сервер анализирует URL-адрес и ищет имя файла. Если он находит этот файл, он отправляет его обратно в браузер, в противном случае отправляет сообщение об ошибке, указывающее, что вы запросили не тот файл.

  • Веб-браузер принимает ответ от веб-сервера и отображает либо полученный файл, либо сообщение об ошибке.

Однако можно настроить HTTP-сервер так, чтобы всякий раз, когда запрашивается файл в определенном каталоге, этот файл не отправляется обратно; вместо этого он выполняется как программа, и все, что выводит эта программа, отправляется обратно для отображения в вашем браузере. Эта функция называется Common Gateway Interface или CGI, а программы называются сценариями CGI. Эти программы CGI могут быть скриптом Python, скриптом PERL, скриптом оболочки, программой C или C ++ и т. Д.

Схема архитектуры 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 убедитесь, что у вас есть режим изменения файла, используяchmod 755 hello.py Команда UNIX для создания исполняемого файла.

#!/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>')

Note- В первой строке скрипта должен быть указан путь к исполняемому файлу Python. В Linux это должно быть #! / Usr / bin / python3

Введите следующий URL-адрес в своем браузере

http://localhost:8080/cgi-bin/hello.py

Привет, Word! Это моя первая программа CGI

Этот сценарий hello.py представляет собой простой сценарий Python, который записывает свой вывод в файл STDOUT, то есть на экран. Доступна одна важная и дополнительная функция - первая строка для печати.Content-type: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

Content-type:

Строка MIME, определяющая формат возвращаемого файла. Пример: Content-type: text / html

2

Expires: Date

Дата, когда информация становится недействительной. Он используется браузером, чтобы решить, когда необходимо обновить страницу. Допустимая строка даты имеет формат 01 января 1998 г., 12:00:00 GMT.

3

Location: URL

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

4

Last-modified: Date

Дата последней модификации ресурса.

5

Content-length: N

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

6

Set-Cookie: String

Установите cookie, передаваемый через строку

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

Все программы CGI имеют доступ к следующим переменным среды. Эти переменные играют важную роль при написании любой программы CGI.

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

CONTENT_TYPE

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

2

CONTENT_LENGTH

Длина информации запроса. Он доступен только для запросов POST.

3

HTTP_COOKIE

Возвращает установленные файлы cookie в виде пары ключ-значение.

4

HTTP_USER_AGENT

Поле заголовка запроса User-Agent содержит информацию о пользовательском агенте, создавшем запрос. Это имя веб-браузера.

5

PATH_INFO

Путь к сценарию CGI.

6

QUERY_STRING

Информация в кодировке URL, отправляемая с запросом метода GET.

7

REMOTE_ADDR

IP-адрес удаленного хоста, отправляющего запрос. Это полезно для ведения журнала или для аутентификации.

8

REMOTE_HOST

Полное имя хоста, выполняющего запрос. Если эта информация недоступна, то для получения IR-адреса можно использовать REMOTE_ADDR.

9

REQUEST_METHOD

Метод, использованный для отправки запроса. Наиболее распространены методы GET и POST.

10

SCRIPT_FILENAME

Полный путь к сценарию CGI.

11

SCRIPT_NAME

Имя сценария CGI.

12

SERVER_NAME

Имя хоста или IP-адрес сервера

13

SERVER_SOFTWARE

Название и версия программного обеспечения, на котором работает сервер.

Вот небольшая программа CGI для вывода всех переменных CGI. Щелкните эту ссылку, чтобы увидеть результат Получить среду

#!/usr/bin/python

import os

print ("Content-type: text/html\r\n\r\n");
print ("<font size=+1>Environment</font><\br>");
for param in os.environ.keys():
   print ("<b>%20s</b>: %s<\br>" % (param, os.environ[param]))

Методы GET и POST

Вы, должно быть, сталкивались со многими ситуациями, когда вам нужно было передать некоторую информацию из вашего браузера на веб-сервер и, в конечном итоге, в вашу программу CGI. Чаще всего браузер использует два метода, два из которых передают эту информацию веб-серверу. Это методы GET и POST.

Передача информации с использованием метода GET

Метод GET отправляет закодированную информацию о пользователе, добавленную к запросу страницы. Страница и закодированная информация разделяются знаком? характер следующим образом -

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

Метод GET - это метод по умолчанию для передачи информации из браузера на веб-сервер, который создает длинную строку, которая появляется в поле Location: вашего браузера. Никогда не используйте метод GET, если у вас есть пароль или другая конфиденциальная информация для передачи на сервер. Метод GET имеет ограничение по размеру: в строке запроса можно отправить только 1024 символа. Метод GET отправляет информацию с помощью заголовка QUERY_STRING и будет доступен в вашей программе CGI через переменную среды QUERY_STRING.

Вы можете передать информацию, просто объединив пары ключ и значение вместе с любым URL-адресом, или вы можете использовать теги HTML <FORM> для передачи информации с помощью метода GET.

Пример простого URL: метод получения

Вот простой 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>")

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

Привет, ЗАРА Али

Простой пример FORM: метод 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 и кнопки отправки. Мы используем тот же сценарий 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-кода для формы с полем ТЕКСТАРА -

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

Использование файлов cookie в CGI

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

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

Как это устроено?

Ваш сервер отправляет некоторые данные в браузер посетителя в виде файла cookie. Браузер может принять файл cookie. Если это так, он сохраняется в виде простой текстовой записи на жестком диске посетителя. Теперь, когда посетитель переходит на другую страницу вашего сайта, cookie доступен для поиска. После получения ваш сервер знает / запоминает, что было сохранено.

Файлы cookie представляют собой запись данных в виде простого текста из 5 полей переменной длины:

  • Expires- Дата истечения срока действия cookie. Если это поле пусто, срок действия cookie истечет, когда посетитель закроет браузер.

  • Domain - Доменное имя вашего сайта.

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

  • Secure- Если это поле содержит слово «безопасный», то файл cookie может быть получен только с помощью безопасного сервера. Если это поле пустое, такое ограничение отсутствует.

  • Name=Value - Файлы cookie устанавливаются и извлекаются в виде пар ключ-значение.

Настройка файлов cookie

Отправить файлы cookie в браузер очень просто. Эти файлы cookie отправляются вместе с заголовком HTTP до поля Content-type. Предполагая, что вы хотите установить UserID и Password как файлы 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. Мы используемSet-Cookie Заголовок HTTP для установки файлов cookie.

Необязательно устанавливать такие атрибуты файлов cookie, как Expires, Domain и Path. Примечательно, что файлы cookie устанавливаются перед отправкой волшебной строки"Content-type:text/html\r\n\r\n.

Получение файлов cookie

Получить все установленные файлы cookie очень просто. Файлы cookie хранятся в переменной среды CGI HTTP_COOKIE, и они будут иметь следующую форму:

key1 = value1;key2 = value2;key3 = value3....

Вот пример того, как получить файлы cookie.

#!/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 для интерфейсов баз данных - Python DB-API. Большинство интерфейсов баз данных Python соответствуют этому стандарту.

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

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase
  • SQLite

Вот список доступных интерфейсов базы данных Python - интерфейсы и API базы данных Python . Вы должны загрузить отдельный модуль DB API для каждой базы данных, к которой вам нужен доступ. Например, если вам нужно получить доступ к базе данных Oracle, а также к базе данных MySQL, вы должны загрузить модули базы данных Oracle и MySQL.

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

  • Импорт модуля API.
  • Установление соединения с базой данных.
  • Выполнение операторов SQL и хранимых процедур.
  • Закрытие соединения

Python имеет встроенную поддержку SQLite. В этом разделе мы изучим все концепции использования MySQL. Модуль MySQLdb, популярный интерфейс с MySQL, несовместим с Python 3. Вместо этого мы будем использовать модуль PyMySQL .

Что такое PyMySQL?

PyMySQL - это интерфейс для подключения к серверу базы данных MySQL из Python. Он реализует Python Database API 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.

Note - Убедитесь, что у вас есть права root для установки вышеуказанного модуля.

Подключение к базе данных

Перед подключением к базе данных 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 для дальнейшего использования, в противном случае dbустановлено значение Нет. Следующий,db объект используется для создания cursorобъект, который, в свою очередь, используется для выполнения 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))
..................................

ПРОЧИТАТЬ операцию

READ Операция с любой базой данных означает получение некоторой полезной информации из базы данных.

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

  • 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

Операция обновления

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

Следующая процедура обновляет все записи, имеющие 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()

Выполнение транзакций

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

  • Atomicity - Либо транзакция завершается, либо вообще ничего не происходит.

  • Consistency - Транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.

  • Isolation - Промежуточные результаты транзакции не видны вне текущей транзакции.

  • Durability - После фиксации транзакции последствия сохраняются даже после сбоя системы.

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 Operation

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

Вот простой пример вызова commit метод.

db.commit()

ROLLBACK Операция

Если вас не устраивает одно или несколько изменений и вы хотите полностью отменить эти изменения, используйте rollback() метод.

Вот простой пример вызова rollback() метод.

db.rollback()

Отключение базы данных

Чтобы отключить соединение с базой данных, используйте метод close ().

db.close()

Если соединение с базой данных закрывается пользователем с помощью метода close (), все невыполненные транзакции откатываются БД. Однако вместо того, чтобы зависеть от каких-либо деталей реализации нижнего уровня БД, вашему приложению было бы лучше явно вызывать фиксацию или откат.

Обработка ошибок

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

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

Sr.No. Исключение и описание
1

Warning

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

2

Error

Базовый класс для ошибок. Должен быть подклассом StandardError.

3

InterfaceError

Используется для ошибок в модуле базы данных, а не в самой базе данных. Должен быть подкласс Error.

4

DatabaseError

Используется для ошибок в базе данных. Должен быть подкласс Error.

5

DataError

Подкласс DatabaseError, который относится к ошибкам в данных.

6

OperationalError

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

7

IntegrityError

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

8

InternalError

Подкласс DatabaseError, который относится к внутренним ошибкам модуля базы данных, таким как курсор больше не активен.

9

ProgrammingError

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

10

NotSupportedError

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

Ваши сценарии Python должны обрабатывать эти ошибки, но перед использованием любого из вышеперечисленных исключений убедитесь, что ваша база данных MySQL поддерживает это исключение. Вы можете получить больше информации о них, прочитав спецификацию DB API 2.0.

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

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

В этой главе вы познакомитесь с самой известной концепцией сети - программированием сокетов.

Что такое сокеты?

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

Сокеты могут быть реализованы по нескольким типам каналов: сокеты домена Unix, TCP, UDP и так далее. Библиотека сокетов предоставляет определенные классы для обработки общих транспортов, а также общий интерфейс для обработки остальных.

У сокетов есть свой словарный запас -

Sr.No. Срок и описание
1

domain

Семейство протоколов, которое используется в качестве транспортного механизма. Эти значения являются константами, такими как AF_INET, PF_INET, PF_UNIX, PF_X25 и т. Д.

2

type

Тип связи между двумя конечными точками, обычно SOCK_STREAM для протоколов с установлением соединения и SOCK_DGRAM для протоколов без установления соединения.

3

protocol

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

4

hostname

Идентификатор сетевого интерфейса -

  • Строка, которая может быть именем хоста, адресом с четырьмя точками или адресом IPV6 в двоеточии (и, возможно, точкой).

  • Строка «<трансляция>», которая указывает адрес INADDR_BROADCAST.

  • Строка нулевой длины, указывающая INADDR_ANY, или

  • Целое число, интерпретируемое как двоичный адрес в байтовом порядке хоста.

5

port

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

Модуль розетки

Чтобы создать сокет, вы должны использовать функцию socket.socket (), доступную в модуле сокета, которая имеет общий синтаксис -

s = socket.socket (socket_family, socket_type, protocol = 0)

Вот описание параметров -

  • socket_family - Это либо AF_UNIX, либо AF_INET, как объяснялось ранее.

  • socket_type - Это либо SOCK_STREAM, либо SOCK_DGRAM.

  • protocol - Обычно это не учитывается, по умолчанию - 0.

Если у вас есть объект сокета , вы можете использовать необходимые функции для создания клиентской или серверной программы. Ниже приведен список необходимых функций -

Методы серверных сокетов

Sr.No. Метод и описание
1

s.bind()

Этот метод связывает адрес (имя хоста, пару номеров порта) с сокетом.

2

s.listen()

Этот метод устанавливает и запускает прослушиватель TCP.

3

s.accept()

Это пассивно принимает клиентское TCP-соединение, ожидая его прибытия (блокировка).

Методы клиентских сокетов

Sr.No. Метод и описание
1

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

Возвращает имя хоста.

Простой сервер

Для написания интернет-серверов мы используем socketфункция, доступная в модуле сокета, для создания объекта сокета. Затем объект сокета используется для вызова других функций для настройки сервера сокетов.

Теперь позвоните в 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(hosname, port )открывает 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 приведен ниже -

Протокол Общая функция Номер порта Модуль Python
HTTP интернет страницы 80 httplib, urllib, xmlrpclib
NNTP Новости Usenet 119 nntplib
FTP Передача файлов 20 ftplib, urllib
SMTP Отправка электронной почты 25 smtplib
POP3 Получение электронной почты 110 поплиб
IMAP4 Получение электронной почты 143 imaplib
Telnet Командные строки 23 telnetlib
Суслик Переводы документов 70 gopherlib, urllib

Пожалуйста, проверьте все упомянутые выше библиотеки для работы с протоколами FTP, SMTP, POP и IMAP.

Дополнительная литература

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

  • Программирование сокетов Unix .

  • Библиотека сокетов Python и модули .

Simple Mail Transfer Protocol (SMTP) - это протокол, который обрабатывает отправку электронной почты и ее маршрутизацию между почтовыми серверами.

Python предоставляет smtplib модуль, который определяет объект сеанса клиента SMTP, который можно использовать для отправки почты на любой компьютер в Интернете с помощью демона прослушивателя SMTP или ESMTP.

Вот простой синтаксис для создания одного объекта SMTP, который позже можно использовать для отправки электронной почты:

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

Вот подробная информация о параметрах -

  • host- Это хост, на котором запущен ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.

  • port- Если вы указываете аргумент хоста , то вам нужно указать порт, на котором SMTP-сервер слушает. Обычно это порт 25.

  • local_hostname- Если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost в качестве опции.

У объекта SMTP есть метод экземпляра, называемый sendmail, который обычно используется для отправки сообщения по почте. Требуется три параметра -

  • Отправитель - строка с адресом отправителя.

  • В Приемники - список А строк, один для каждого получателя.

  • Сообщение - сообщение в виде строки , отформатированной как указано в различном РЛКЕ.

пример

Вот простой способ отправить одно электронное письмо с помощью скрипта Python. Попробуй один раз -

#!/usr/bin/python3

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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"

Здесь вы поместили основное электронное письмо в сообщение, используя тройную кавычку, позаботившись о правильном форматировании заголовков. Электронная почта требуетFrom, To, а Subject заголовок, отделенный от тела письма пустой строкой.

Для отправки почты вы используете 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 <[email protected]>
To: To Person <[email protected]>
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. Затем можно указать текст и разделы вложения вboundaries.

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

Прикрепленные файлы должны быть закодированы 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 = '[email protected]'
reciever = '[email protected]'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
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")

Запуск нескольких потоков аналогичен одновременному запуску нескольких разных программ, но со следующими преимуществами:

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

  • Потоки иногда называют легковесными процессами, и они не требуют больших затрат памяти; они дешевле процессов.

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

  • Его можно упредить (прервать).

  • Его можно временно приостановить (также известное как спящий режим), пока работают другие потоки - это называется уступкой.

Есть два разных вида нитей -

  • поток ядра
  • поток пользователя

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

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

  • _thread
  • threading

Модуль потоков уже давно считается устаревшим. Вместо этого пользователям рекомендуется использовать модуль потоковой передачи. Следовательно, в 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, чтобы остановить

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

Модуль Threading

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

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

  • threading.activeCount() - Возвращает количество активных объектов потока.

  • threading.currentThread() - Возвращает количество объектов потока в элементе управления потоком вызывающего объекта.

  • threading.enumerate() - Возвращает список всех активных в данный момент объектов потока.

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

  • run() - Метод run () - это точка входа для потока.

  • start() - Метод start () запускает поток, вызывая метод run.

  • join([time]) - join () ожидает завершения потоков.

  • isAlive() - Метод isAlive () проверяет, выполняется ли все еще поток.

  • getName() - Метод getName () возвращает имя потока.

  • setName() - Метод setName () устанавливает имя потока.

Создание потока с использованием модуля Threading

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

  • Определите новый подкласс класса 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() - Помещение добавляет элемент в очередь.

  • qsize() - qsize () возвращает количество элементов, которые в данный момент находятся в очереди.

  • empty()- Empty () возвращает True, если очередь пуста; в противном случае - False.

  • full()- full () возвращает True, если очередь заполнена; в противном случае - False.

пример

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

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

Что такое XML?

Extensible Markup Language (XML) - это язык разметки, очень похожий на HTML или SGML. Это рекомендовано Консорциумом World Wide Web и доступно в качестве открытого стандарта.

XML чрезвычайно полезен для отслеживания небольших и средних объемов данных, не требуя магистрали на основе SQL.

Архитектуры синтаксического анализатора XML и API

Стандартная библиотека Python предоставляет минимальный, но полезный набор интерфейсов для работы с XML.

Двумя наиболее основными и широко используемыми API для данных XML являются интерфейсы SAX и DOM.

  • Simple API for XML (SAX)- Здесь вы регистрируете обратные вызовы для интересующих событий, а затем позволяете синтаксическому анализатору пройти через документ. Это полезно, когда ваши документы большие или у вас есть ограничения памяти, он анализирует файл по мере чтения с диска, и весь файл никогда не сохраняется в памяти.

  • Document Object Model (DOM) API - Это рекомендация Консорциума 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 с помощью API SAX

SAX - это стандартный интерфейс для анализа XML, управляемого событиями. Для синтаксического анализа XML с помощью SAX обычно требуется создать собственный ContentHandler путем создания подкласса xml.sax.ContentHandler.

Ваш ContentHandler обрабатывает определенные теги и атрибуты вашего вкуса (ов) XML. Объект ContentHandler предоставляет методы для обработки различных событий синтаксического анализа. Собственный синтаксический анализатор вызывает методы ContentHandler во время анализа XML-файла.

Методы startDocument и endDocument вызываются в начале и в конце XML-файла. В символы метода (текст) передаются символьные данные файла XML через текст параметра.

ContentHandler вызывается в начале и в конце каждого элемента. Если синтаксический анализатор не находится в режиме пространства имен, вызываются методы startElement (тег, атрибуты) и endElement (тег) ; в противном случае вызываются соответствующие методы startElementNS и endElementNS . Здесь tag - это тег элемента, а attributes - это объект Attributes.

Вот другие важные методы, которые необходимо понять, прежде чем продолжить -

Метод make_parser

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

xml.sax.make_parser( [parser_list] )

Вот подробности о параметрах -

  • parser_list - Необязательный аргумент, состоящий из списка используемых парсеров, все из которых должны реализовывать метод make_parser.

Метод синтаксического анализа

Следующий метод создает синтаксический анализатор SAX и использует его для анализа документа.

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

Вот подробности о параметрах -

  • xmlfile - Это имя XML-файла для чтения.

  • contenthandler - Это должен быть объект ContentHandler.

  • errorhandler - Если указано, обработчик ошибок должен быть объектом SAX ErrorHandler.

Метод parseString

Есть еще один метод создания парсера SAX и синтаксического анализа указанного XML string.

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

Вот подробности о параметрах -

  • xmlstring - Это имя XML-строки для чтения.

  • contenthandler - Это должен быть объект ContentHandler.

  • 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, пожалуйста, обратитесь к стандартным Python SAX API .

Разбор XML с помощью DOM API

Объектная модель документа («DOM») - это межъязыковой API от Консорциума World Wide Web (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, пожалуйста, обратитесь к стандартным Python DOM API .

Python предоставляет различные варианты разработки графических пользовательских интерфейсов (GUI). Наиболее важные функции перечислены ниже.

  • Tkinter- Tkinter - это интерфейс Python для набора инструментов Tk GUI, поставляемого с Python. Мы бы рассмотрели этот вариант в этой главе.

  • wxPython- Это интерфейс Python с открытым исходным кодом для набора инструментов графического интерфейса пользователя wxWidgets. Вы можете найти полное руководство по WxPython здесь .

  • PyQt- Это также интерфейс Python для популярной кроссплатформенной библиотеки Qt GUI. TutorialsPoint имеет очень хороший учебник по PyQt здесь .

  • JPython - JPython - это порт Python для Java, который предоставляет скриптам Python беспрепятственный доступ к библиотекам классов Java на локальном компьютере. http://www.jython.org.

Есть много других доступных интерфейсов, которые вы можете найти в сети.

Программирование на Tkinter

Tkinter - это стандартная библиотека графического интерфейса для Python. Python в сочетании с Tkinter обеспечивает быстрый и простой способ создания приложений с графическим интерфейсом. Tkinter предоставляет мощный объектно-ориентированный интерфейс для набора инструментов Tk GUI.

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

  • Импортируйте модуль Tkinter .

  • Создайте главное окно приложения GUI.

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

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

пример

#!/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()

Это создаст следующее окно -

Виджеты Tkinter

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

В настоящее время в Tkinter есть 15 типов виджетов. Мы представляем эти виджеты, а также краткое описание в следующей таблице -

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

Виджет «Кнопка» используется для отображения кнопок в вашем приложении.

2 Холст

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

3 Checkbutton

Виджет Checkbutton используется для отображения ряда параметров в виде флажков. Пользователь может выбрать одновременно несколько вариантов.

4 Вход

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

5 Рамка

Виджет «Рамка» используется как виджет-контейнер для организации других виджетов.

6 метка

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

7 Список

Виджет Listbox используется для предоставления пользователю списка опций.

8 Menubutton

Виджет Menubutton используется для отображения меню в вашем приложении.

9 Меню

Виджет «Меню» используется для предоставления пользователю различных команд. Эти команды содержатся внутри Menubutton.

10 Сообщение

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

11 Переключатель

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

12 Шкала

Виджет «Масштаб» используется для предоставления виджета ползунка.

13 Полоса прокрутки

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

14 Текст

Виджет Текст используется для отображения текста в несколько строк.

15 Высший уровень

Виджет Toplevel используется для предоставления отдельного оконного контейнера.

16 Spinbox

Виджет Spinbox - это вариант стандартного виджета Tkinter Entry, который можно использовать для выбора из фиксированного количества значений.

17 PanedWindow

PanedWindow - это виджет-контейнер, который может содержать любое количество панелей, расположенных горизонтально или вертикально.

18 LabelFrame

Labelframe - это простой виджет-контейнер. Его основное предназначение - действовать как распорка или контейнер для сложных макетов окон.

19 tkMessageBox

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

Стандартные атрибуты

Давайте посмотрим, как указаны некоторые из их общих атрибутов, таких как размеры, цвета и шрифты.

  • Dimensions

  • Colors

  • Fonts

  • Anchors

  • Стили рельефа

  • Bitmaps

  • Cursors

Управление геометрией

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

  • Метод pack () - этот менеджер геометрии объединяет виджеты в блоки перед их размещением в родительском виджете.

  • Метод grid () - этот менеджер геометрии организует виджеты в виде таблицы в родительском виджете.

  • Метод place () - этот менеджер геометрии организует виджеты, помещая их в определенную позицию в родительском виджете.

Любой код, который вы пишете на любом скомпилированном языке, таком как C, C ++ или Java, можно интегрировать или импортировать в другой скрипт Python. Этот код считается «расширением».

Модуль расширения Python - это не что иное, как обычная библиотека C. На машинах Unix эти библиотеки обычно заканчиваются на.so(для общего объекта). На компьютерах с Windows вы обычно видите.dll (для динамически подключаемой библиотеки).

Предварительные требования для написания расширений

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

  • На машинах Unix для этого обычно требуется установка пакета для конкретного разработчика, например.

  • Пользователи Windows получают эти заголовки как часть пакета при использовании двоичного установщика Python.

Кроме того, предполагается, что вы хорошо знакомы с C или C ++, чтобы писать любое расширение Python с использованием программирования на C.

Первый взгляд на расширение Python

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

  • Заголовочный файл 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-эквивалент PythonNoneзначение. Заголовки Python определяют макрос Py_RETURN_NONE, который делает это за нас.

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

Ваши функции C обычно именуются путем объединения имен модуля Python и функций вместе, как показано здесь -

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

Это функция Python, называемая func внутри модуля модуля . Вы будете помещать указатели на свои функции 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, если вам не хочется ее писать.

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

пример

Для указанной выше функции у нас есть следующая таблица сопоставления методов -

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

Функция инициализации

Последняя часть вашего модуля расширения - это функция инициализации. Эта функция вызывается интерпретатором Python при загрузке модуля. Требуется, чтобы функция была названаinitModule, где Module - это имя модуля.

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

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

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

Вот описание Py_InitModule3 функция -

  • 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, чтобы иметь права на запись в каталог пакетов сайта. Обычно это не проблема Windows.

Импорт расширений

После установки расширений вы сможете импортировать и вызывать это расширение в своем скрипте Python следующим образом:

пример

#!/usr/bin/python3
import helloworld

print helloworld.helloworld()

Вывод

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

Hello, Python extensions!!

Передача параметров функции

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

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 Имея в виду
c char Строка Python длиной 1 становится символом C.
d двойной Поплавок Python становится двойным C.
ж плавать Поплавок Python становится поплавком C.
я int Python int становится C int.
л долго Python int становится длиной C.
L долго долго Python int становится C long long
О PyObject * Получает заимствованную ссылку на аргумент Python, отличную от NULL.
s символ * Строка Python без встроенных нулей в C char *.
s # char * + int Любая строка Python с адресом C и длиной.
т # char * + int Односегментный буфер только для чтения с адресом и длиной C.
ты Py_UNICODE * Python Unicode без встроенных нулей в C.
ты # Py_UNICODE * + int Любой адрес и длина Python Unicode C.
w # char * + int Чтение / запись односегментного буфера по адресу C и длине.
z символ * Как и s, также принимает None (устанавливает C char * в NULL).
z # char * + 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 Имея в виду
c char AC char становится строкой Python длиной 1.
d двойной AC double становится плавающей точкой Python.
ж плавать AC float становится Python float.
я int AC int становится Python int.
л долго AC long становится Python int.
N PyObject * Передает объект Python и крадет ссылку.
О PyObject * Передает объект Python и выполняет INCREF как обычно.
O & convert + void * Произвольное преобразование
s символ * C 0-завершающийся символом * в строку Python или NULL в None.
s # char * + int C char * и длина в строку Python или от NULL до None.
ты Py_UNICODE * Строка с нулевым символом в конце для Python Unicode или от NULL до None.
ты # Py_UNICODE * + int Строка шириной C и длина в Python Unicode или от NULL до None.
w # char * + int Чтение / запись односегментного буфера по адресу C и длине.
z символ * Как и s, также принимает None (устанавливает C char * в NULL).
z # char * + int Как и s #, также принимает None (устанавливает C char * в NULL).
(...) согласно ... Строит кортеж Python из значений C.
[...] согласно ... Строит список Python из значений C.
{...} согласно ... Строит словарь Python из значений C, чередующихся ключей и значений.

Code {...} строит словари из четного числа значений C, попеременно ключей и значений. Например, Py_BuildValue ("{issi}", 23, "zig", "zag", 42) возвращает словарь вроде Python {23: 'zig', 'zag': 42}.