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