Python
·
“Python is a second best language for all” (c) don’t know
Язык программирования разработанный Гвидо ван Россумом в качестве ответа на запрос простоты яыка в среде математиков. Хорош исходя из описание для всего, но в первую очередь используется в качестве языка для [[backend]] разработки, для [[machine learning]] и для написания [[cli]] утилит.
Менеджмент зависимостей
python -m venv .venv # создание виртуальной среды
# с помощью pip
pip install lib
pip freeze > requirements.txt
# с помощью pip-tools
echo lib >> requirements.in
pip-compile -o requirements.txt requirements.in
pip install -r requirements.txt
# дописать poetry
Полезности
Удаление кеша от CPython, но лучше настроить себе makefile:
find . -type f -name "*.py[co]" -delete
find . -type d -name "__pycache__" -delete
Сниппеты
Настройка логов в консоль для всего:
import logging.config
LOGGING = {
"version": 1,
"formatters": {
"verbose": {
"format": ("P%(process)d;%(levelname)s;%(asctime)s;%(module)s;%(message)s")
}
},
"handlers": {"console": {"class": "logging.StreamHandler", "formatter": "verbose"}},
"root": {"level": "DEBUG", "handlers": ["console"]},
}
logging.config.dictConfig(LOGGING)
Использование стека вместо рекурсии:
work = [create_initial_work()]
while work:
work_item = work.pop()
result = process(work_item)
if is_done(result):
return result
work.push(result.pieces[0])
work.push(result.pieces[1])
Случайная строка:
import random
import string
def get_random_string(length):
# choose from all lowercase letter
letters = string.ascii_lowercase
result_str = ''.join(random.choice(letters) for i in range(length))
return result_str
Дебаг всех http запросов:
import requests
import logging
# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# The only thing missing will be the response.body which is not logged.
try:
import http.client as http_client
except ImportError:
# Python 2
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
Типовые структуры данных
- collections.defaultdict - словарь для которого устанавливаются дефолтные значения в случае отсутствия
- collections.deque - оптимизированная двухсторонная очередь (stack + queue)
- heapq.heapify - priority queue на основе хипа
Обратные ссылки
Return error objects in python
Link:: https://lukeplant.me.uk/blog/posts/raising-exceptions-or-returning-error-objects-in-python/
Unittest vs pytest
В python есть несколько библиотек для написания тестов. Двумя наиболее популярными являются pytest и unittest...
Programming
Под программированием я понимаю ту часть, где формальное техническое задание (или как правило неформальное бизнесовое)...
django
Один из web-фреймворков на python. Отличается тем, что внутри есть всё для типичного сайта: авторизация,...
Makefile
GNU Make - программа для генерации программ из исходников. Изначально было заточено под C, но...
Gunicorn
Gunicorn - web сервер для python приложений, как правило, используется в связки с django. У...