Библиотека Python разработчика | Книги по питону
19.5K subscribers
1.05K photos
391 videos
82 files
987 links
Полезные материалы для питониста по Фреймворкам Django, Flask, FastAPI, Pyramid, Tornado и др.

По всем вопросам @evgenycarter

РКН clck.ru/3Ko7Hq
Download Telegram
Функции как объекты в Python

В Python функции являются объектами первого класса, что означает, что их можно присваивать переменным, передавать как аргументы другим функциям, возвращать из других функций и хранить в структурах данных, таких как списки или словари.

Рассмотрим основные аспекты использования функций как объектов:

1. Присваивание функции переменной
Вы можете присвоить функцию переменной и вызывать её через эту переменную.


def greet(name):
return f"Hello, {name}!"

say_hello = greet # присваиваем функцию переменной
print(say_hello("Alice")) # вызов через переменную


2. Передача функции в качестве аргумента
Функцию можно передать как аргумент другой функции.


def apply_function(func, value):
return func(value)

def square(x):
return x ** 2

result = apply_function(square, 5)
print(result) # вывод: 25


3. Возврат функции из другой функции
Функция может возвращать другую функцию.


def make_multiplier(factor):
def multiplier(x):
return x * factor
return multiplier

double = make_multiplier(2)
print(double(5)) # вывод: 10


4. Хранение функций в структурах данных
Функции можно хранить в списках, словарях и других структурах данных.


def add(x, y):
return x + y

def subtract(x, y):
return x - y

operations = {
'add': add,
'subtract': subtract
}

print(operations['add'](10, 5)) # вывод: 15
print(operations['subtract'](10, 5)) # вывод: 5


5. Анонимные функции (lambda)
Вы можете создавать функции "на лету" с помощью выражения lambda.


multiply = lambda x, y: x * y
print(multiply(3, 4)) # вывод: 12


Таким образом, функции в Python могут использоваться гибко и динамически, что позволяет писать более функциональный и модульный код.

👉@BookPython
Статистика на примерах с Python #1

Содержание:
1.1 Общая информация
1.2 Генеральная совокупность и выборка
1.3 Типы переменных. Количественные и номинативные переменные
1.4 Меры центральной тенденции

https://habr.com/ru/articles/786760/

👉@BookPython
Как правильно структурировать Python-проект

Под "структурой" мы понимаем решения, которые вы принимаете относительно того, как ваш проект наилучшим образом достигает своей цели. Нам нужно рассмотреть, как лучше всего использовать возможности Python для создания чистого и эффективного кода. На практике "структура" означает создание чистого кода, чья логика и зависимости понятны, а также то, как файлы и папки организованы в файловой системе.

Какие функции должны находиться в каких модулях? Как данные перемещаются по проекту? Какие функции и возможности можно сгруппировать и изолировать? Отвечая на такие вопросы, вы можете начать планировать, в общих чертах, каким будет ваш готовый продукт.

В этом разделе мы более подробно рассмотрим модули Python и систему импорта, так как они являются центральными элементами, обеспечивающими структуру вашего проекта. Затем мы обсудим различные подходы к созданию кода, который можно расширять и надежно тестировать.

https://docs.python-guide.org/writing/structure/

👉@BookPython
Сравнение производительности dict() и {} в Python

Какое-то время назад, во время разбора кода, мы обсудили выбор dict() вместо {} в новом коде на Python. Коллега утверждал, что dict() более читаем и чётче выражает предназначение кода, поэтому следует предпочесть его. Меня это не убедило, но в тот момент контраргументов не нашлось, поэтому я воздержался.

Это заставило меня задуматься: в чём разница между типом dict и литеральным выражением {}?

Давайте изучим этот вопрос.

https://madebyme.today/blog/python-dict-vs-curly-brackets/

👉@BookPython
This media is not supported in your browser
VIEW IN TELEGRAM
Бесплатное IT-образование в 2024

Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления

Выбирайте нужное и подписывайтесь:

👩‍💻 Python: @PythonPortal
📱 GitHub: @git_developer
🤓 Книги айти: @portalToIT
⚙️ Backend: @BackendPortal
👩‍💻 Frontend: @FrontendPortal
👩‍💻 Java: @Java_Iibrary
👩‍💻 C#: @KodBlog
👩‍💻 С/С++: @Cpportal
🖥 Базы Данных & SQL: @SQL
👩‍💻 Golang: @juniorGolang
👩‍💻 PHP: @PHPortal
👩‍💻 Моб. разработка: @MobDev
👩‍💻 Разработка игр: @GameDevgx
👩‍💻 DevOps: @loose_code
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
🐞 Тестирование: @QAPortal
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign

➡️ Сохраняйте себе, чтобы не потерять
Please open Telegram to view this post
VIEW IN TELEGRAM
Параллелизм в Python с помощью FastAPI

Давайте погрузимся в эту тему с помощью нового крутого фреймворка ASGI, FastAPI. Это concurrent framework, что означает asyncio-friendly. Тианголо, автор, утверждает, что производительность находится на одном уровне с веб-серверами Go и Node.

https://horaceguy.pages.dev/posts/python-concurrency/

👉@BookPython
Модуль functools для манипуляций с функциями

Модуль functools в Python предоставляет инструменты для работы с функциями, позволяя выполнять различные манипуляции с ними. Вот некоторые из наиболее важных функций и возможностей, которые предоставляет functools:

1. `functools.partial`: Позволяет зафиксировать некоторые аргументы функции и создать новую функцию с предопределенными значениями.


from functools import partial

def multiply(x, y):
return x * y

double = partial(multiply, 2)
print(double(5)) # Вывод: 10


2. `functools.reduce`: Применяет функцию к паре элементов в последовательности, сокращая ее до одного значения. Обычно используется для аккумуляции значений.


from functools import reduce

numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product) # Вывод: 24


3. `functools.lru_cache`: Кэширует результаты вызовов функции, чтобы ускорить повторные вызовы с теми же аргументами. Полезно для функций с дорогими вычислениями.


from functools import lru_cache

@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(10)) # Вывод: 55


4. `functools.wraps`: Декоратор, который сохраняет метаданные оригинальной функции (такие как имя и документация) при создании декоратора.


from functools import wraps

def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Что-то делаем перед вызовом функции")
return func(*args, **kwargs)
return wrapper

@my_decorator
def say_hello():
"""Выводит приветствие."""
print("Привет!")

print(say_hello.__name__) # Вывод: say_hello
print(say_hello.__doc__) # Вывод: Выводит приветствие.


5. `functools.total_ordering`: Упрощает реализацию всех методов сравнения для класса, определяя только несколько из них.


from functools import total_ordering

@total_ordering
class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __eq__(self, other):
return (self.x, self.y) == (other.x, other.y)

def __lt__(self, other):
return (self.x, self.y) < (other.x, other.y)

p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1 < p2) # Вывод: True
print(p1 <= p2) # Вывод: True


Эти функции и декораторы делают functools мощным инструментом для функционального программирования в Python.

👉@BookPython
Что такое Pickling и Unpickling?

В Python pickling и unpickling — это процессы сериализации и десериализации объектов, соответственно, с использованием модуля pickle.

- Pickling — это процесс преобразования объекта Python (например, словаря, списка, класса и т.д.) в байтовую последовательность (или поток байтов), которая может быть сохранена в файл или передана по сети. Этот процесс позволяет сохранить состояние объекта для дальнейшего использования.

- Unpickling — это обратный процесс, при котором байтовая последовательность преобразуется обратно в объект Python.

Пример использования:

1. Pickling (сериализация):


import pickle

# Создаем объект
data = {'name': 'Alice', 'age': 25, 'city': 'New York'}

# Сохраняем объект в файл
with open('data.pickle', 'wb') as f:
pickle.dump(data, f)


2. Unpickling (десериализация):


import pickle

# Читаем объект из файла
with open('data.pickle', 'rb') as f:
loaded_data = pickle.load(f)

print(loaded_data)


Когда это может быть полезно?
- Сохранение промежуточных данных в файл для повторного использования.
- Передача сложных объектов между разными программами или системами.
- Сохранение состояния приложения.

Однако, нужно быть осторожным с unpickling, так как загрузка непроверенных данных может привести к выполнению вредоносного кода.

👉@BookPython
Аутентификация, авторизация пользователей и единый вход (SSO) с использованием Django

Меня зовут Вячеслав Разводов, и я уже более 10 лет в IT. За это время мне удалось пройти путь от разработки на Delphi, разработки веб-сайтов на PHP-фреймворках до backend-разработки на Python. Этот материал является результатом моих усилий по систематизации знаний об SSO (единой системе идентификации).

В моей карьере присутствует период работы в бюджетной организации, подчиняющейся Министерству здравоохранения, где моя задача - разрабатывать информационные системы в формате веб-приложений. Условно системы можно сгруппировать:

- регистры для специфических заболеваний;
- инструменты для сбора статистических данных от медицинских работников;
- системы для обработки отчетности.

https://habr.com/ru/articles/787040/

👉@BookPython
PikaScript

Ультралегкий интерпретатор Python, работающий всего с 4 КБ оперативной памяти, с нулевыми зависимостями. Он готов к использованию из коробки, не требует конфигурации и легко расширяется с помощью языка C. Похожие проекты: MicroPython, JerryScript.

Все это позволяет вам программировать на языке Python даже для самых маломощных микроконтроллеров семейства STM32

https://github.com/pikasTech/PikaPython

👉@BookPython
HTTP-сервер Rust для приложений на Python

Особенности
Поддерживает интерфейсные приложения ASGI/3, RSGI и WSGI
Реализует протоколы HTTP/1 и HTTP/2
Поддерживает HTTPS
Поддержка Websockets

https://github.com/emmett-framework/granian

👉@BookPython
Подборка Telegram каналов для программистов

Системное администрирование 📌
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин

https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux

1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus

Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.me/game_devv Все о разработке игр

Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов

БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.me/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Английский 📌
https://t.me/UchuEnglish Английский с нуля

Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
https://t.me/Excel_lifehack

https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)

Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Сравнение производительности dict() и {} в Python

Какое-то время назад, во время разбора кода, мы обсудили выбор dict() вместо {} в новом коде на Python. Коллега утверждал, что dict() более читаем и чётче выражает предназначение кода, поэтому следует предпочесть его. Меня это не убедило, но в тот момент контраргументов не нашлось, поэтому я воздержался.

Это заставило меня задуматься: в чём разница между типом dict и литеральным выражением {}?


https://habr.com/ru/articles/788440/

original https://madebyme.today/blog/python-dict-vs-curly-brackets/

👉@BookPython
Что такое хуки? Как они используются в Python?

Хуки (hooks) в программировании — это специальные точки в коде, в которые можно «вклиниться», чтобы изменить или расширить поведение программы без модификации её исходного кода. Хуки позволяют добавлять дополнительную логику или выполнять нужные действия, когда происходят определенные события.


⚫️Как хуки используются в Python?

В Python хуки часто реализуются в библиотеках и фреймворках для того, чтобы пользователи могли добавлять свои функции, выполняющиеся при определённых событиях. Они применяются в тестировании, веб-разработке, обработке данных и многих других областях. Вот несколько примеров использования хуков в Python:

1. Тестовые фреймворки (например, pytest):
В тестовом фреймворке pytest есть хуки для настройки и завершения тестов. Вы можете создать функции, которые будут выполняться до начала тестов (`pytest_runtest_setup`) или после их завершения (`pytest_runtest_teardown`). Это удобно для создания и очистки тестовой среды.


# Пример hook-функции в pytest
def pytest_runtest_setup(item):
print(f"Setting up for test: {item.name}")


2. Веб-фреймворки (например, Django):
В Django хуки используются для расширения поведения, например, перед или после сохранения объекта. Так, у моделей Django есть хуки pre_save и post_save, которые позволяют выполнять код до и после сохранения объекта в базе данных.


from django.db.models.signals import pre_save
from django.dispatch import receiver
from .models import MyModel

@receiver(pre_save, sender=MyModel)
def my_hook(sender, instance, **kwargs):
print("This runs before saving MyModel instance.")


3. Flask (перед/после обработки запроса):
Flask имеет хуки before_request и after_request, которые позволяют выполнить код до обработки HTTP-запроса или после отправки ответа.


from flask import Flask

app = Flask(__name__)

@app.before_request
def before_request_func():
print("This runs before each request")

@app.after_request
def after_request_func(response):
print("This runs after each request")
return response


4. Логирование и обработка ошибок:
Встроенный модуль logging в Python поддерживает хуки для настраиваемой обработки логов, например, через методы addFilter или создание своих обработчиков (`handlers`), чтобы настроить кастомное поведение логирования.

Хуки гибкие и удобные, поскольку они позволяют разработчику интегрировать собственную логику в существующий код, не изменяя его.

👉@BookPython
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое «сырые» строки (Raw Strings) в Python?

В Python "сырые" строки (или **raw strings**) — это строки, в которых символы обратного слэша \ воспринимаются буквально, а не как специальные символы (например, \n для новой строки, \t для табуляции и т. д.). Они обозначаются префиксом r перед строкой, например: r"строка".

Сырые строки удобны, когда вам нужно использовать много обратных слэшей, например, в путях к файлам или регулярных выражениях, где \ часто встречается. Сырые строки упрощают код и помогают избежать ошибок, связанных с экранированием символов.

Пример использования

# Обычная строка
print("C:\\new_folder\\file.txt") # Выводит: C:\new_folder\file.txt

# Сырая строка
print(r"C:\new_folder\file.txt") # Выводит: C:\new_folder\file.txt


В первом случае \\ используется для экранирования, чтобы Python не воспринял \n как символ новой строки. В случае сырой строки r"...", экранирование не нужно, так как \ воспринимается буквально.

👉@BookPython
Типизация в Python

Динамическая типизация позволяет определять и изменять тип переменных во время выполнения программы, в отличие от статической, при которой типы данных определяются на этапе компиляции и не подлежат изменениям. Динамическая типизация позволяет уменьшить сложность кода, но при этом возрастает риск появления ошибок, связанных с неправильным типом данных.

Аннотации типов можно использовать для типизации функций Python. В функциях можно аннотировать аргументы функций, их возвращаемые значения, декораторы функции и т.д.


def find_max(numbers: List[int]) -> int:
if not numbers:
raise ValueError(“Список пуст”)
max_value: int = numbers[0]
for num in numbers:
if num > max_value:
max_value = num
return max_value


https://telegra.ph/Tipizaciya-v-Python-11-01

👉@BookPython
Самый быстрый способ чтения Excel в Python: чтение 500 тысяч строк менее чем за 4 секунды

У меня нет данных, чтобы подтвердить это утверждение, но я почти уверен, что Excel — самый распространённый способ хранения, обработки и, да(!), даже передачи данных. Именно поэтому нередко приходится работать с Excel в Python. Недавно мне понадобилось это сделать, и я протестировал и оценил несколько способов чтения файлов Excel в Python.

https://hakibenita.com/fast-excel-python#results-summary

👉@BookPython
Поиск самой быстрой JSON-библиотеки на Python (8 сравнений)

Большинство тестов производительности, подобных этому, включают всего четыре библиотеки JSON: обычно стандартную библиотеку JSON, orjson, ujson и rapidjson. Однако, благодаря моему максималистскому подходу, я решил пойти гораздо дальше и найти все библиотеки JSON, которые так или иначе можно использовать, и протестировать их. Таким образом я обнаружил некоторых «новых игроков», таких как cysimdjson, yapic.json и pysimdjson.

orjson: ijl/orjson
pysimdjson: TkTech/pysimdjson
yapic.json: zozzz/yapic.json
simplejson: simplejson/simplejson
ujson: ultrajson/ultrajson
python-rapidjson: python-rapidjson/python-rapidjson
cysimdjson: TeskaLabs/cysimdjson
nujson (deprecated): caiyunapp/ultrajson

https://catnotfoundnear.github.io/finding-the-fastest-python-json-library-on-all-python-versions-8-compared.html

👉@BookPython