1 | :PROPERTIES:
|
---|
2 | :ID: e3725676-12e5-4e8d-a3cc-cc2c29fdee7a
|
---|
3 | :END:
|
---|
4 | #+title: Python
|
---|
5 | ** Типы данных
|
---|
6 | - Numeric data types :: int, float, complex
|
---|
7 | - String data types :: str
|
---|
8 | - Sequence types :: list, tuple, range
|
---|
9 | - Binary types :: bytes, bytearray, memoryview
|
---|
10 | - Mapping data type :: dict
|
---|
11 | - Boolean type :: bool
|
---|
12 | - Set data types :: set, frozenset
|
---|
13 | ** Достоинства
|
---|
14 | - Относительно простой
|
---|
15 | - Много библиотек, не ограничен одной областью применения
|
---|
16 | - Хорошая документация
|
---|
17 | - Понятные ошибки (по сравнению с PHP и Ruby)
|
---|
18 | - Поддержка репла, но инструкции и много других вещей всё портят
|
---|
19 | - Встроенный дебаггер
|
---|
20 | - Хорошая поддержка в GNU Emacs
|
---|
21 | - Всё есть объект при этом мало ООП
|
---|
22 | - Модульность из Модула-2
|
---|
23 | - Строгая типизация
|
---|
24 | - Аннотации типов
|
---|
25 | - Хорошая проверка типов при полном указании типов
|
---|
26 | - Может компилировать в бинарник при аннотациях типов (см. mypyc)
|
---|
27 | - Есть несколько реализаций (Cpython, Cython, Pypy, Micropython и другие)
|
---|
28 | - Генерация в байткод
|
---|
29 |
|
---|
30 | ** Недостатки
|
---|
31 | - Императивный; Мало ФП
|
---|
32 | - Однострочные лямбды
|
---|
33 | - Нет макросов
|
---|
34 | - Есть перегрузка только существующих операторов. Нельзя создавать новые.
|
---|
35 | - Множественное наследование
|
---|
36 | - Cpython медленные
|
---|
37 | - Аннотации типов не проверяются в рантайме
|
---|
38 | - Плохая поддержка репла
|
---|
39 | - Ад из пакетных менеджеров. Пакетный менеджер может поставить кучу
|
---|
40 | обскьюрных сишных библиотек.
|
---|
41 | - GIL. Плохая многопоточность.
|
---|
42 | - У языка нет стандарта.
|
---|
43 | - Нет стратегий сборки мусора.
|
---|
44 | - Сложный переход от python2 к python3
|
---|
45 |
|
---|
46 | [[https://gist.github.com/RobertAKARobin/a1cba47d62c009a378121398cc5477ea][Список других недостатков Python]]
|
---|
47 |
|
---|
48 | ** Ресурсы
|
---|
49 | - [[https://en.wikipedia.org/wiki/Python_syntax_and_semantics][Python syntax and semantics]]
|
---|
50 | - [[https://docs.python.org/3/glossary.html][Термины]]
|
---|
51 | - [[https://python-3-patterns-idioms-test.readthedocs.io/en/latest/index.html][Паттерны]]
|
---|
52 |
|
---|
53 | ** FAQ
|
---|
54 | - [[https://docs.python.org/3/faq/programming.html][Программирование]]
|
---|
55 |
|
---|
56 | ** Создание бинарника
|
---|
57 | - https://marcelotduarte.github.io/cx_Freeze/
|
---|
58 | - https://pyinstaller.org/en/stable/
|
---|
59 |
|
---|
60 | ** Шпаргалка
|
---|
61 | [[https://github.com/ehmatthes/pcc_2e/releases/download/v1.0.1/beginners_python_cheat_sheet_pcc_all.pdf][Cheatsheet]]
|
---|
62 |
|
---|
63 | | метод | что реализует | для чего вызывается |
|
---|
64 | | __init__ | конструктор | создание объекта x=Class(args) |
|
---|
65 | | __del__ | деструктор | уничтожение объекта X |
|
---|
66 | | __add__ | операция + | X + Y, X += Y если отсутствует iadd |
|
---|
67 | | __or__ | операция OR | X |
|
---|
68 | | __repr__, str | вывод, преобразования | print(X), repr(X), str(X) |
|
---|
69 | | __call__ | вызовы функций | X(*args, **kargs) |
|
---|
70 | | __getattr__ | извлечение атрибута | X.undefined |
|
---|
71 | | __setattr__ | присваивание атрибута | X.any = value |
|
---|
72 | | __delattr__ | удаление атрибута | del X.any |
|
---|
73 | | __getarrtibute__ | извлечение атрибута | X.any |
|
---|
74 | | __getitem__ | индексация, нарезание, итерация | X[key], X[i:j], циклы for и другие если отсуствует iter |
|
---|
75 | | __setitem__ | присваивание по индексу и срез | X[key]=value, X[i:j]=iterable |
|
---|
76 | | __delitem__ | удаление по индексу или срезу | del X[key], del[i:j] |
|
---|
77 | | __len__ | длина len(X), проверки истинности если отсуствует bool | |
|
---|
78 | | __bool__ | булевские проверки | bool(X) |
|
---|
79 | | __lt__ | сравнения | X < Y |
|
---|
80 | | __gt__ | сравнения | X > Y |
|
---|
81 | | __le__ | сравнения | X <= Y |
|
---|
82 | | __ge__ | сравнения | X >= Y |
|
---|
83 | | __eq__ | сравнения | X == Y |
|
---|
84 | | __ne__ | сравнения | X != Y |
|
---|
85 | | __radd__ | правосторонние операции | other + X |
|
---|
86 | | __iadd__ | дополненные на месте операции | X += Y (либо иначе add) |
|
---|
87 | | __iter__ | итерационные контексты | I=iter(x), next(I); циклы for, in если отсуствуют contains, все включения map(F,X) |
|
---|
88 | | __next__ | итерационные контексты | см iter |
|
---|
89 | | __contains__ | проверка членства | item in X (любой итерируемый объект) |
|
---|
90 | | __index__ | целочисленное значение | hex(X), bin(X), oct(X), O(X), O[X:] |
|
---|
91 | | __enter__ | диспетчер контекста (см далее) | with obj as var: |
|
---|
92 | | __exit__ | диспетчер контекста (см далее) | |
|
---|
93 | | __get__, | set атрибуты дескриптора | X.attr, X.attr = value |
|
---|
94 | | __delete__ | атрибуты дескриптора | del X.attr |
|
---|
95 | | __new__ | создание создание объекта перед init | |
|
---|
96 |
|
---|
97 | [[https://i.redd.it/dixavkhibu351.png]]
|
---|
98 |
|
---|
99 | #+begin_src python
|
---|
100 | class foo():
|
---|
101 | def __init__(self, kind=None):
|
---|
102 | self.kind = kind
|
---|
103 |
|
---|
104 | def __call__(self, kind=None):
|
---|
105 | return foo(kind=kind)
|
---|
106 |
|
---|
107 | def my_print(self):
|
---|
108 | print (self.kind)
|
---|
109 |
|
---|
110 | def line(self):
|
---|
111 | return self(kind='line')
|
---|
112 | def bar(self):
|
---|
113 | return self(kind='bar')
|
---|
114 |
|
---|
115 | a = foo()
|
---|
116 | a.bar().line().bar().bar().line().my_print()
|
---|
117 | #+end_src
|
---|
118 |
|
---|
119 | #+RESULTS:
|
---|
120 |
|
---|
121 |
|
---|
122 | ** Примеры кода
|
---|
123 | *** Функция высшего порядка
|
---|
124 | #+begin_src python
|
---|
125 | def linear(a, b):
|
---|
126 | def result(x):
|
---|
127 | return a * x + b
|
---|
128 | return result
|
---|
129 |
|
---|
130 | return linear(2, 5)(5)
|
---|
131 | #+end_src
|
---|
132 |
|
---|
133 | #+RESULTS:
|
---|
134 | : 15
|
---|
135 |
|
---|
136 | #+begin_src python
|
---|
137 | class linear:
|
---|
138 |
|
---|
139 | def __init__(self, a, b):
|
---|
140 | self.a, self.b = a, b
|
---|
141 |
|
---|
142 | def __call__(self, x):
|
---|
143 | return self.a * x + self.b
|
---|
144 |
|
---|
145 | p return linear(2, 5)(5)
|
---|
146 | #+end_src
|
---|
147 |
|
---|
148 | #+RESULTS:
|
---|
149 | : 15
|
---|
150 |
|
---|
151 | ** Книги
|
---|
152 | - Марк Лутз (Изучаем Python и другие)
|
---|
153 | - Python Crash Course
|
---|
154 |
|
---|
155 | ** Ресурсы
|
---|
156 |
|
---|
157 | ** Статьи
|
---|
158 | - [[https://beej.us/guide/bgpython/html/][Beej Guide to Python]]
|
---|
159 |
|
---|
160 | ** Видео
|
---|
161 | - [[https://www.youtube.com/watch?v=rfscVS0vtbw][Туториал на 4.5 часа]]
|
---|
162 |
|
---|
163 | Источники знания:
|
---|
164 | - https://uneex.org/Python/GeoPython2021
|
---|