Классический взгляд на особенности Python

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

Настоящая публикация содержит конспект изучения языка Python разработчиком привыкшим к классическим языкам (Pascal, C++, Java). Изложение в публикации будет простым, наглядным и слегка вульгарным, как и сама идеология Python.

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

Python 1.0 был выпущен в январе 1994 года, в декабре 2008 года был выпущен Python 3.0, актуальная версия 3.9 выпущена 5 октября 2020 года (является последней на момент публикации).

  • Новые интересные функции в Python 3.8 //webdevblog.ru

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

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

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

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

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

///

Число <class ‘int’>, <class ‘float’>

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

Строка <class ‘str’>

Строки в Python используют кодировку UTF, .!!!

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

Условие (if, elif, else)

///

Цикл (while, continue, break, else)

//

//

Цикл (for, continue, break, else)

//

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

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

 

/

Бездействие (pass)

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

 

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

///

Функции

Вызов функции print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

 

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

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

Параметры

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)

Источники

Добавить комментарий