Язык python.

Основные характеристики

  • Универсальный.
  • Простой.
  • Интерпретируемый.
  • Мультипарадигмный.
  • Динамическая семантика.
  • Кроссплатформенный (linux, macOS, windows, AIX, IBM i, iOS, iPadOS и др.).

Парадигмы программирования

  • Императивное (процедурный, структурный, модульный подходы).
  • Объектно-ориентированное.
  • Функциональное.

Соглашения (PEP)

  • https://www.python.org/dev/peps/
  • Python Enhancement Proposals - предложения по развитию питона
  • PEP8 - соглашение по стилю кодирования.
  • PEP20 - Дзен питона
  • PEP7 - соглашение по оформлению Си кода.
  • около ~600

Соглашение по стилю кодирования

  • Отступы.
  • Максимальная длина строки - 79 символов.
  • Пробелы
  • Пустые строки
  • Имена
  • и многое другое

Документация

  • Библиотека pydoc
  • help(dict)
> help(os)
> help(dict)

class dict(object)
 |  dict() -> new empty dictionary
 |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v
 |  dict(**kwargs) -> new dictionary initialized with the name=value pairs
 |      in the keyword argument list.  For example:  dict(one=1, two=2)
 |
 |  Methods defined here:

				    

Управление памятью

  • Наличие сборщика мусора.
  • Два: алгоритм подстчета ссылок и поколенческий GC.
  • Python хранит журнал ссылок на каждый объект.
  • Когда на объект нет ссылок - объект удаляется.
  • При удалении память не отдается ОС, а остается для других объектов такого же размера.

Управление памятью

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

Управление памятью

  • Поколенческий GC можно отключить, алгоритм подсчета ссылок - нет.
  • Отключение: gc.disable()
  • Вызов вручную: gc.collect()

Присваивания и ссылки

>>> a = 7
>>> b = a
>>> a is b
True
>>> a += 1
>>> a is b
False
				    

Скалярные (неделимые) типы данных

  • Числа (целое, вещественное).
  • Логический тип.
  • NoneType.

Структурированные (составные) / коллекции.

  • Последовательности: строка, список, кортеж, числовой диапазон.
  • Множества.
  • Отображения: словарь.

2 категории типов

  • Мутирующие (англ. Mutable): содержимое объекта можно изменить после создания (например, список);
  • Немутирующие (англ. Immutable): содержимое объекта нельзя изменить после создания (например, строка или число).
  • Преимуществом немутирующих типов является гарантия неизменяемости с момента создания.

Коллекции

Коллекции — это группа типов данных, которые содержат в себе другие данные и поддерживают:
  • проверку на вхождения элементов in и not in (True/False);
  • определение размера len();
  • возможность выполнения итераций (перемещения по элементам последовательности)

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

  • Последовательность - это упорядоченная коллекция, поддерживающая индексированный доступ к элементам.
  • Пять встроенных типов последовательностей: str, list, tuple и range.
  • Склейка: s + t
  • Индексация: s[0]
  • Срез: s[start:end]
  • Срез шагом: s[start:end:step]

Множества

  • Множество - это неупорядоченная коллекция уникальных элементов.
  • 2 класса для работы с множествами:
  • set (изменяемое множество: add, remove, pop, clear);
  • frozenset (неизменяемое множество).
  • a = {2, 4, 6, 8, 10}

Отображения

  • Отображение - это неупорядоченная коллекция пар элементов «ключ-значение».
  • Класс dict
  • d = {"one": 1, "two": 2, "three": 3}
  • dict(one=1, two=2, three=3)
  • d["one"]

Функции

  • Функции определяются с помощью инструкции def
def sum(x, y):
    return x + y
# Лямбда-функция 
result = lambda x: len(x)

def func(*args):
      return args

def func(**kwargs):
         return kwargs
func(a=1, b=2, c=3)
{'a': 1, 'c': 3, 'b': 2}
				    

Работа с файлами

f = open('test.json', 'a') # или w
f.write("Содержимое файла")
f.close()
				    

Объектно-ориентированное программирование

  • Любое значение - объект.
  • Классы: class
  • pass - пустой класс
  • Методы класс с помощью def

Пример создания класса.

class Point2D:
    """Точка на плоскости."""
    # Конструктор
    def __init__(self, x, y):
        self.x = x  # Поля читаются и записываются через 'self'
        self.y = y  # 'self' указывает на текущий экземпляр класса

    # Метод
    def distance(self):
        """Вернуть расстояние до центра координат."""
        return (self.x**2 + self.y**2)**0.5

# Инициализация
p = Point2D(3, 4)

				    

Функциональное программирование

  • map(): отображение;
  • filter(): фильтрация;
  • functools.reduce(): упрощение;
  • lambda;
  • comprehension (коллекционные включения).

Стандартная библиотека

  • Математика: math, random, statistics
  • Дата/время: datetime, time, calendar, pytz (временные зоны), locale
  • Операционная система: sys, platform, os, shutil, subprocess, glob
  • Регулярные выражения: re, regex, match.

Сторонние библиотеки

  • web-приложения (Django, Flask).
  • игры (Pygame).
  • математические вычисления и анализ данных (NumPy, Pandas, Matplotlib).
  • работа с текстовыми файлами, изображениями, аудио и видео файлами (PyMedia).
  • графический интерфейс пользователя (PyQT, PyGObject).
  • ИИ: Scikit-Learn

Проект Cyphon

  • Прослойка между Python и C/C++
  • Синтаксис как Python (есть изменения)
  • Необходимо определять тип в коде
  • Транслирует код в C, затем в выполняемый файл.

Проект Cyphon

def test(x):
    y = 1
    for i in range(1, x+1):
        y *= i
    return y

cpdef int test(int x):
    cdef int y = 1
    cdef int i
    for i in range(1, x+1):
        y *= i
    return y

				    

Виртуальная среда (Virtual Environments)

  • Позволяет устанавливать пакеты изолированно (не в систему).
  • Две библиотеки для создания среды: venv (python 3.3), virtualenv (python 2.7+).
python3 -m venv <DIR> # создать среду
source <DIR>/bin/activate # активировать среду
deactivate # выйти из среды
				    

Менеджер пакетов pip

  • pypi (python package index) - хранилище пакетов.
  • Пакет в формате исходного кода (включает метаданные для установки).
  • Пакет в формате wheel (бинарный формат).
python -m pip install sampleproject
python -m pip install git+https://github.com/pypa/sampleproject.git@main
python -m pip install sampleproject-1.0.tar.gz # пакет как исходный код
python -m pip install sampleproject-1.0-py3-none-any.whl
python -m pip install -r requirements.txt