Конспект Python


Высокоуровневый язык программирования общего назначения Python ориентирован на повышение производительности разработчика и читаемости кода; синтаксис ядра минималистичен; поддерживает структурное, обобщенное, объектно-ориентированное, функциональное и аспектно-ориентированное программирование. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений, высокоуровневые структуры данных. Поддерживается разбиение программ на модули, которые, в свою очередь, могут объединяться в пакеты.
Настоящая публикация содержит конспект изучения языка Python разработчиком привыкшим к классическим языкам (Pascal, C++, Java). Изложение в публикации будет простым, наглядным и слегка вульгарным, как и сама идеология Python.

Версии языка Python

Python 1.0 был выпущен в январе 1994 года.
В декабре 2008 года был выпущен Python 3.0, также именуемый Python 3000 или Py3k. В версии 3.0 устранены многие архитектурные недостатки и с версиями 2.x она ограничено совместима.
Последняя на момент публикации актуальная версия 3.11 выпущена 5 апреля 2023 года.

Программный код

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

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

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

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

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

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

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

Основные примитивы

Присваивание в Python на первый взгляд не отличается от классических языков:

Однако важно понимать, что любая переменная Python является объектом (физический идентификатор объекта можно получить функцией id(...)). Присваивание по сути является ассоциированием имени с объектом-значением, что принципиально отличается от классических языков, в которых присваивание является копированием значения в идентифицируемую область памяти. Детальней это принципиальное отличие описано в публикации "Указатели в Python: в чём суть?". Пример:

Python позволяет выполнить множественное присваивание, в котором сначала вычисляются все выражения правой части, а затем ассоциируются (присваиваются) с именами в левой части:

Версия Python 3.8 добавила возможность walrus, которая позволяет выполнить присваивание внутри выражения. Аналогичная возможность изначально была в C++, и хорошо что Python это заметил через 26 лет:

///

Числа /типы int, float, complex

Числа в Python бывают целыми и "плавающими", для них определены операции +, -, *, ** (степень), /, // (целочисленное деление), % (остаток от деления). К плавающему значению приводит любое деление, а в остальных операциях, только если хоть один из операндов был плавающим. Самым удивительным результатом является остаток целочисленного деления плавающего:

Строка <class 'str'>

Текстовые данные в Python представляются строками - объектам класса str. Строки представляют собой неизменяемые последовательности кодовых точек Unicode.
В Python 3.x строки используют кодировку UTF-8.

Значения строк можно задавать литералами обрамленными парой '  или ", которые синтаксически равнозначны. Способы:

Перед строковым литералом может использоваться префикс в верхнем или нижнем регистре:

  • f делает строку форматным шаблоном, который может содержать выражения замены в фигурных скобках {}, вычисляемые во время выполнения; добавлено в Python 3.6
  • r подавляет экранирование в литерале:
  • u представляет строку кодов unicode, которые будут преобразованы к строке:
  • b представляет байтовый литерал, создающий экземпляр типа bytes (а не str); в литерале допустимы только печатные символы ASCII и escape-последовательности:

Конец строки не зависит от входящих в строку символов (строку не завершает какой-либо символ, подобно \x00 в С++). Полную длину строки возвращает функция len(...):

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

Строка являются также python-списком (будет описан ниже), который предусматривает итератор, перечисляющий все символы строки.

///

Составные типы данных

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

Список <class 'list'>

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

Срез (slice?)

Срез списка - это новый список <class 'list'>, содержащий подмножество элементов коллекции исходного списка. Способ задания параметров среза очень напоминает цикл for из C++, в котором задается начальное значение индекса, значение индекса прекращающего цикл, шаг приращения индекса:

Кортеж <class 'tuple'>

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

Множество <class 'set'>

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

Словарь <class 'dict'>

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

Для словаря недоступен итератор, тем не менее из словаря методом .items() можно получить объект типа <class 'dict_items'>, который по сути является списком кортежей, или использовать список ключей метода .keys() и список значений метода .values() совмещенных функцией zip(...):

Управление потоком выполнения

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

Блоки

Тернарный оператор в выражении с условием

Выражение с тернарным оператором использует синтаксис:
true_expr if condition else false_expr
//

 

Условный оператор /if, elif, else

///

е в выражение

///

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

Оператор цикла /while, continue, break, else

//

//

Оператор цикла /for, continue, break, else

//

Списки, кортежи, множества и словари могут быть соединены для синхронной итерации в цикле функцией zip(...), при этом число итераций будет определено самой короткой коллекцией:

Функция enumerate(...) возвращает полученный из объекта коллекции объект типа <class 'enumerate'>, итератор которого содержит индекс:

 

/

Оператор бездействия (pass)

Синтаксис Python не позволяет оставить блок условия или цикла (после двоеточия) пустым, но если так нужно сделать, то следует использовать Pass:

 

Оператор обработки исключений (try, except, finally, ...)

///

Оператор контекстного блока /with

Выражение применяется с объектами являющимися менеджерами контекста, как альтернатива каскаду выражений try...finaly.

Функции и методы

Функции и методы Python используются сходным

  • function()
  • modul.function()
  • typename.type_method()
  • class.static_method()
  • object.method()

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

  • последовательность значений в порядке установленном в определении метода
  • последовательность именованных значений в произвольном порядке !!!!

предоставляет Вызов функции print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

 

Определение (Def, Return)

def cheeseshop(kind, *arguments, **keywords):

Параметры

//

В объявлении функции символ * перед параметром означает, что этот параметр является неопределенным количеством позиционных аргументов. Такой параметр обычно называется "args" и представляется в виде кортежа, который будет доступен внутри функции через параметр args:

 

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

 

def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
----------- ---------- ----------
| | |
| Positional or keyword |
| - Keyword only
-- Positional only

Лямбда функции

my_func = lambda a, b: a + b

my_func(1, 2)

Генераторы

Генерация динамических последовательностей, которые не размещаются в памяти выполняется с помощью ключевого слова yield !!!

Пакеты

!!! Пакеты !!! Получить список доступных модулей #linux ssh:

Получить список доступных модулей win-команда:

Команда Python:

help('modules')

Добавление модулей утилитой PIP

 

Python предусматривает неограниченное расширение базовой функциональности через дополнительные пакеты, для управления которыми используется специальная утилита \Program Files\Python*\Scripts\pip.exe. Утилита позволяет просматривать, устанавливать, удалять и обновлять пакеты командами в командной строке OS.

Список пакетов установленных PIP вызывает команда:

Установка нового пакета в полной и сокращенной форме:

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

Утилита pip предусматривает возможность обновления самой утилиты pip:

Ошибка ModuleNotFoundError: No module named 'pip'

Если любые операции с пакетами завершаются ошибкой No module named 'pip', то возможно утилита повреждена и следует загрузить и выполнить установочный файл get-pip.py:

Пакет numpy

//numpy.org/doc/stable/user/index.html

Пакет json

//

Стиль

PEP 8 – Style Guide for Python Code дает рекомендации по написанию кода Python, которым соответствуют  модули стандартной библиотеки Python. Приоритетными являются читаемость и структурность кода. Впрочем, приведенные рекомендации скорее отражают привычки автора, а не стройную систему, и достаточно спорны:

  • длина строк не должна превышать 79 символов для кода и 72 для текста
  • для установки начального отступа пробелы предпочтительней табуляции (микс недопустим)
  • допустимо минимальное применение разделительных пробелов в выражениях
    • пробел допускается в операторах после ,, ;, : и вокруг знаков +, -, =, ==, != в арифметических и логических выражениях, кроме * (почему-то)
    • не рекомендуется ни внутри, ни снаружи () и [], кроме случаев предыдущего пункта, но не всегда
  • в именах переменных и методов предпочтителен змеиный стиль
    • верблюжий стиль применяется в именовании классов

 

Установка Python

Загрузка установочного пакета нужной версии не требует специальных комментариев. Установку следует выполнить в режиме Customize installation, который позволяет выполнить общую установку Python для всех пользователей. Пояснения требуют только две последние опции:

  • Download debugging symbols - отладочные символы нужны отладчику смешанного режима в Visual Studio для анализа множества внутренних структур данных
  • Download debug binaries - обычно не нужны

Обновление

Для обновления pip:

Web Server Gateway Interface (WSGI)

WSGI используется для связи со своими веб-серверами многими фреймворками, так делают Django, Flask и многие другие //www.toptal.com

куча

Все ключевые слова Python из !!! :

 

Источники

Leave a Reply