diff options
Diffstat (limited to 'content/digarden/pages/20220202183614-python.org')
-rw-r--r-- | content/digarden/pages/20220202183614-python.org | 164 |
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 |