1 | :PROPERTIES:
|
---|
2 | :ID: 2d40c870-3ea1-4065-a982-a1db1a5a69d6
|
---|
3 | :END:
|
---|
4 | #+title: Python
|
---|
5 | * Python
|
---|
6 | Высокоуровневый язык программирования, применяемый для широкого спектра
|
---|
7 | задач. Достаточно убог сам по себе, но исторически очень распространён (возможно
|
---|
8 | из-за влияния корпораций в частности Google). Python неплох относительно другого
|
---|
9 | мейнстрима.
|
---|
10 |
|
---|
11 | Два основных фреймворка для web:
|
---|
12 | - [[id:8ec304b0-7981-4f0a-a6ed-7b7ee27cb9d2][Django]]
|
---|
13 | - [[id:0fb97d24-aa68-43ef-ad97-731af80bcbe1][Flask]]
|
---|
14 |
|
---|
15 | Ключевые слова:
|
---|
16 | - and
|
---|
17 | - as
|
---|
18 | - assert
|
---|
19 | - async
|
---|
20 | - await
|
---|
21 | - break
|
---|
22 | - class
|
---|
23 | - continue
|
---|
24 | - def
|
---|
25 | - del
|
---|
26 | - elif
|
---|
27 | - else
|
---|
28 | - except
|
---|
29 | - False
|
---|
30 | - finally
|
---|
31 | - for
|
---|
32 | - from
|
---|
33 | - global
|
---|
34 | - if
|
---|
35 | - import
|
---|
36 | - in
|
---|
37 | - is
|
---|
38 | - lambda
|
---|
39 | - None
|
---|
40 | - nonlocal
|
---|
41 | - not
|
---|
42 | - or
|
---|
43 | - pass
|
---|
44 | - raise
|
---|
45 | - return
|
---|
46 | - True
|
---|
47 | - try
|
---|
48 | - while
|
---|
49 | - with
|
---|
50 | - yield
|
---|
51 |
|
---|
52 | Интерфейсы в Python:
|
---|
53 | - Абстрактные классы с использованием @abstractMethod
|
---|
54 | - Протоколы из MyPy
|
---|
55 |
|
---|
56 | Ультимативная справка по языку:
|
---|
57 | https://gto76.github.io/python-cheatsheet/
|
---|
58 |
|
---|
59 | https://python.org/
|
---|
60 |
|
---|
61 | [[https://python-patterns.guide][Паттерны Python]]
|
---|
62 |
|
---|
63 | Профилирование и дебаг:
|
---|
64 | - Objgraph
|
---|
65 | Рисует графы, созданных объектов
|
---|
66 | - Pympler
|
---|
67 | Показывает сколько памяти едят те или иные объекты
|
---|
68 | - Mprof
|
---|
69 | Рисует график потребления памяти с течением времени
|
---|
70 |
|
---|
71 | [[https://stackoverflow.com/questions/1113611/what-does-ruby-have-that-python-doesnt-and-vice-versa][Отличия Python и Ruby]]
|
---|
72 |
|
---|
73 | Преимущества Python:
|
---|
74 | - Есть работа
|
---|
75 | - Маленький язык (не так много лексем, 1.2 миллионов строк кода на си, openjdk например около 20)
|
---|
76 | - Хоть какая-то интерактивная разработка и интроспекция
|
---|
77 | - Есть doc-string
|
---|
78 |
|
---|
79 | Недостатки Python:
|
---|
80 | - Байткод никак не оптимизируется
|
---|
81 | - Boolean это числа -1, 0 и 1
|
---|
82 | - Нет Multiple Dispatch (https://github.com/mrocklin/multipledispatch)
|
---|
83 | ([[https://towardsdatascience.com/the-correct-way-to-overload-functions-in-python-b11b50ca7336][Как перегружать функции в Python]])
|
---|
84 | - Нет модификаторов доступа
|
---|
85 | - Нет интерфейсов
|
---|
86 | - Нет встроенной проверки типов
|
---|
87 | - Нет стандарта
|
---|
88 | - Низкая производительность
|
---|
89 | - Отсутствует jar / phar
|
---|
90 | - GIL
|
---|
91 | - Слишком сильно отличающийся синтаксис по сравнению с C / C++ / Java
|
---|
92 | - Множественное наследование
|
---|
93 | - Плохая поддержка функциональной парадигмы
|
---|
94 | - Замыкание реализовано через ООП костыль
|
---|
95 | - Неявные сокращения в стандартной библиотеке
|
---|
96 | - Нарушение совместимости (Python 2 => Python 3)
|
---|
97 | - Слишком много пакетных менеджеров
|
---|
98 | - Нет switch-case
|
---|
99 | - Не настолько сильно переносим на другие системы как Java (особенно под
|
---|
100 | Windows)
|
---|
101 | - В документации не пишет полную API функций (например не пишет какие
|
---|
102 | типы она конкретно принимает и возвращает), но это решается нынче
|
---|
103 | аннотациями типов для стандартной библиотеки.
|
---|
104 | - 4 способа отформатировать строку
|
---|
105 | - List comprehensions сложные для чтения (фп подход был бы понятнее)
|
---|
106 | - Отсутствует Let
|
---|
107 | - Есть None
|
---|
108 |
|
---|
109 | https://wiki.python.org/moin/PythonWarts
|
---|
110 |
|
---|
111 | [[https://airbrake.io/blog/python/class-hierarchy][Иерархия ошибок]]
|
---|
112 |
|
---|
113 | Видео:
|
---|
114 | - [[https://www.youtube.com/watch?v=D0vbuIDOV4c][«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС]]
|
---|
115 |
|
---|
116 | Книги:
|
---|
117 | - От лутца
|
---|
118 |
|
---|
119 |
|
---|
120 | Веб-сайты:
|
---|
121 | - https://python-scripts.com
|
---|
122 | - https://devguide.python.org/
|
---|
123 |
|
---|
124 | https://i.stack.imgur.com/Ty2F3.png
|
---|