source: content/digarden/20220202183614-python.org@ 5a2b670

Last change on this file since 5a2b670 was 5a2b670, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:37:40 PM

Add digital garden

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