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