summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20220202183614-python.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/digarden/pages/20220202183614-python.org')
-rw-r--r--content/digarden/pages/20220202183614-python.org164
1 files changed, 164 insertions, 0 deletions
diff --git a/content/digarden/pages/20220202183614-python.org b/content/digarden/pages/20220202183614-python.org
new file mode 100644
index 0000000..16b4679
--- /dev/null
+++ b/content/digarden/pages/20220202183614-python.org
@@ -0,0 +1,164 @@
+:PROPERTIES:
+:ID: e3725676-12e5-4e8d-a3cc-cc2c29fdee7a
+:END:
+#+title: Python
+** Типы данных
+- Numeric data types :: int, float, complex
+- String data types :: str
+- Sequence types :: list, tuple, range
+- Binary types :: bytes, bytearray, memoryview
+- Mapping data type :: dict
+- Boolean type :: bool
+- Set data types :: set, frozenset
+** Достоинства
+- Относительно простой
+- Много библиотек, не ограничен одной областью применения
+- Хорошая документация
+- Понятные ошибки (по сравнению с PHP и Ruby)
+- Поддержка репла, но инструкции и много других вещей всё портят
+- Встроенный дебаггер
+- Хорошая поддержка в GNU Emacs
+- Всё есть объект при этом мало ООП
+- Модульность из Модула-2
+- Строгая типизация
+- Аннотации типов
+- Хорошая проверка типов при полном указании типов
+- Может компилировать в бинарник при аннотациях типов (см. mypyc)
+- Есть несколько реализаций (Cpython, Cython, Pypy, Micropython и другие)
+- Генерация в байткод
+
+** Недостатки
+- Императивный; Мало ФП
+- Однострочные лямбды
+- Нет макросов
+- Есть перегрузка только существующих операторов. Нельзя создавать новые.
+- Множественное наследование
+- Cpython медленные
+- Аннотации типов не проверяются в рантайме
+- Плохая поддержка репла
+- Ад из пакетных менеджеров. Пакетный менеджер может поставить кучу
+ обскьюрных сишных библиотек.
+- GIL. Плохая многопоточность.
+- У языка нет стандарта.
+- Нет стратегий сборки мусора.
+- Сложный переход от python2 к python3
+
+[[https://gist.github.com/RobertAKARobin/a1cba47d62c009a378121398cc5477ea][Список других недостатков Python]]
+
+** Ресурсы
+- [[https://en.wikipedia.org/wiki/Python_syntax_and_semantics][Python syntax and semantics]]
+- [[https://docs.python.org/3/glossary.html][Термины]]
+- [[https://python-3-patterns-idioms-test.readthedocs.io/en/latest/index.html][Паттерны]]
+
+** FAQ
+- [[https://docs.python.org/3/faq/programming.html][Программирование]]
+
+** Создание бинарника
+- https://marcelotduarte.github.io/cx_Freeze/
+- https://pyinstaller.org/en/stable/
+
+** Шпаргалка
+[[https://github.com/ehmatthes/pcc_2e/releases/download/v1.0.1/beginners_python_cheat_sheet_pcc_all.pdf][Cheatsheet]]
+
+| метод | что реализует | для чего вызывается |
+| __init__ | конструктор | создание объекта x=Class(args) |
+| __del__ | деструктор | уничтожение объекта X |
+| __add__ | операция + | X + Y, X += Y если отсутствует iadd |
+| __or__ | операция OR | X |
+| __repr__, str | вывод, преобразования | print(X), repr(X), str(X) |
+| __call__ | вызовы функций | X(*args, **kargs) |
+| __getattr__ | извлечение атрибута | X.undefined |
+| __setattr__ | присваивание атрибута | X.any = value |
+| __delattr__ | удаление атрибута | del X.any |
+| __getarrtibute__ | извлечение атрибута | X.any |
+| __getitem__ | индексация, нарезание, итерация | X[key], X[i:j], циклы for и другие если отсуствует iter |
+| __setitem__ | присваивание по индексу и срез | X[key]=value, X[i:j]=iterable |
+| __delitem__ | удаление по индексу или срезу | del X[key], del[i:j] |
+| __len__ | длина len(X), проверки истинности если отсуствует bool | |
+| __bool__ | булевские проверки | bool(X) |
+| __lt__ | сравнения | X < Y |
+| __gt__ | сравнения | X > Y |
+| __le__ | сравнения | X <= Y |
+| __ge__ | сравнения | X >= Y |
+| __eq__ | сравнения | X == Y |
+| __ne__ | сравнения | X != Y |
+| __radd__ | правосторонние операции | other + X |
+| __iadd__ | дополненные на месте операции | X += Y (либо иначе add) |
+| __iter__ | итерационные контексты | I=iter(x), next(I); циклы for, in если отсуствуют contains, все включения map(F,X) |
+| __next__ | итерационные контексты | см iter |
+| __contains__ | проверка членства | item in X (любой итерируемый объект) |
+| __index__ | целочисленное значение | hex(X), bin(X), oct(X), O(X), O[X:] |
+| __enter__ | диспетчер контекста (см далее) | with obj as var: |
+| __exit__ | диспетчер контекста (см далее) | |
+| __get__, | set атрибуты дескриптора | X.attr, X.attr = value |
+| __delete__ | атрибуты дескриптора | del X.attr |
+| __new__ | создание создание объекта перед init | |
+
+[[https://i.redd.it/dixavkhibu351.png]]
+
+#+begin_src python
+ class foo():
+ def __init__(self, kind=None):
+ self.kind = kind
+
+ def __call__(self, kind=None):
+ return foo(kind=kind)
+
+ def my_print(self):
+ print (self.kind)
+
+ def line(self):
+ return self(kind='line')
+ def bar(self):
+ return self(kind='bar')
+
+ a = foo()
+ a.bar().line().bar().bar().line().my_print()
+#+end_src
+
+#+RESULTS:
+
+
+** Примеры кода
+*** Функция высшего порядка
+#+begin_src python
+ def linear(a, b):
+ def result(x):
+ return a * x + b
+ return result
+
+ return linear(2, 5)(5)
+#+end_src
+
+#+RESULTS:
+: 15
+
+#+begin_src python
+ class linear:
+
+ def __init__(self, a, b):
+ self.a, self.b = a, b
+
+ def __call__(self, x):
+ return self.a * x + self.b
+
+p return linear(2, 5)(5)
+#+end_src
+
+#+RESULTS:
+: 15
+
+** Книги
+- Марк Лутз (Изучаем Python и другие)
+- Python Crash Course
+
+** Ресурсы
+
+** Статьи
+- [[https://beej.us/guide/bgpython/html/][Beej Guide to Python]]
+
+** Видео
+- [[https://www.youtube.com/watch?v=rfscVS0vtbw][Туториал на 4.5 часа]]
+
+ Источники знания:
+- https://uneex.org/Python/GeoPython2021