Table of Contents

Типы данных

Numeric data types
int, float, complex
String data types
str
Sequence types
list, tuple, range
Binary types
bytes, bytearray, memoryview
Mapping data type
dict
Boolean type
bool
Set data types
set, frozenset

Достоинства

  • Относительно простой
  • Много библиотек, не ограничен одной областью применения
  • Хорошая документация
  • Понятные ошибки (по сравнению с PHP и Ruby)
  • Поддержка репла, но инструкции и много других вещей всё портят
  • Встроенный дебаггер
  • Хорошая поддержка в GNU Emacs
  • Всё есть объект при этом мало ООП
  • Модульность из Модула-2
  • Строгая типизация
  • Аннотации типов
  • Хорошая проверка типов при полном указании типов
  • Может компилировать в бинарник при аннотациях типов (см. mypyc)
  • Есть несколько реализаций (Cpython, Cython, Pypy, Micropython и другие)
  • Генерация в байткод

Недостатки

  • Императивный; Мало ФП
  • Однострочные лямбды
  • Нет макросов
  • Есть перегрузка только существующих операторов. Нельзя создавать новые.
  • Множественное наследование
  • Cpython медленные
  • Аннотации типов не проверяются в рантайме
  • Плохая поддержка репла
  • Ад из пакетных менеджеров. Пакетный менеджер может поставить кучу обскьюрных сишных библиотек.
  • GIL. Плохая многопоточность.
  • У языка нет стандарта.
  • Нет стратегий сборки мусора.
  • Сложный переход от python2 к python3

Список других недостатков Python

Ресурсы

FAQ

Создание бинарника

Шпаргалка

Cheatsheet

метод что реализует для чего вызывается
__init__ конструктор создание объекта x=Class(args)
__del__ деструктор уничтожение объекта X
__add__ операция + X + Y, X += Y если отсутствует iadd
__or__ операция OR X
__repr__, str вывод, преобразования print(X), repr(X), str(X)
__call__ вызовы функций X(*args, **kargs)
__getattr__ извлечение атрибута X.undefined
__setattr__ присваивание атрибута X.any = value
__delattr__ удаление атрибута del X.any
__getarrtibute__ извлечение атрибута X.any
__getitem__ индексация, нарезание, итерация X[key], X[i:j], циклы for и другие если отсуствует iter
__setitem__ присваивание по индексу и срез X[key]=value, X[i:j]=iterable
__delitem__ удаление по индексу или срезу del X[key], del[i:j]
__len__ длина len(X), проверки истинности если отсуствует bool  
__bool__ булевские проверки bool(X)
__lt__ сравнения X < Y
__gt__ сравнения X > Y
__le__ сравнения X <= Y
__ge__ сравнения X >= Y
__eq__ сравнения X == Y
__ne__ сравнения X != Y
__radd__ правосторонние операции other + X
__iadd__ дополненные на месте операции X += Y (либо иначе add)
__iter__ итерационные контексты I=iter(x), next(I); циклы for, in если отсуствуют contains, все включения map(F,X)
__next__ итерационные контексты см iter
__contains__ проверка членства item in X (любой итерируемый объект)
__index__ целочисленное значение hex(X), bin(X), oct(X), O(X), O[X:]
__enter__ диспетчер контекста (см далее) with obj as var:
__exit__ диспетчер контекста (см далее)  
__get__, set атрибуты дескриптора X.attr, X.attr = value
__delete__ атрибуты дескриптора del X.attr
__new__ создание создание объекта перед init  

dixavkhibu351.png

class foo():
  def __init__(self, kind=None):
      self.kind = kind

  def __call__(self, kind=None):
      return foo(kind=kind)

  def my_print(self):
      print (self.kind)

  def line(self):
      return self(kind='line')
  def bar(self):
      return self(kind='bar')

a = foo()
a.bar().line().bar().bar().line().my_print()    

Примеры кода

Функция высшего порядка

def linear(a, b):
  def result(x):
      return a * x + b
  return result

return linear(2, 5)(5)
  class linear:

    def __init__(self, a, b):
	self.a, self.b = a, b

    def __call__(self, x):
	return self.a * x + self.b

p  return linear(2, 5)(5)

Книги

  • Марк Лутз (Изучаем Python и другие)
  • Python Crash Course

Ресурсы

Статьи

Видео

w96k Ⓐ 2019-2022

2022-11-08 Tue 20:37