Python в 2025 году: исследование Python Software Foundation
Восьмой ежегодный опрос разработчиков Python, проведённый создателями языка и командой PyCharm, собрал более 30 000 ответов.
И вот интересные факты на его базе:
— Python остаётся основным языком для своих пользователей. В отличие от многих других языков, 86 % респондентов используют Python как основной язык программирования;
— Половина сообщества — новички. Интересно, что 50 % опрошенных имеют менее двух лет профессионального опыта в программировании, а 39 % — менее двух лет опыта работы с Python;
— доля респондентов, использующих FastAPI, выросла с 29 до 38%;
— Менеджер пакетов uv становится новым стандартом из-за скорости;
— Использование GPT через Hugging Face Transformers позволяет легко интегрировать ИИ в проекты.
#факт
@zen_of_python
Восьмой ежегодный опрос разработчиков Python, проведённый создателями языка и командой PyCharm, собрал более 30 000 ответов.
И вот интересные факты на его базе:
— Python остаётся основным языком для своих пользователей. В отличие от многих других языков, 86 % респондентов используют Python как основной язык программирования;
— Половина сообщества — новички. Интересно, что 50 % опрошенных имеют менее двух лет профессионального опыта в программировании, а 39 % — менее двух лет опыта работы с Python;
— доля респондентов, использующих FastAPI, выросла с 29 до 38%;
— Менеджер пакетов uv становится новым стандартом из-за скорости;
— Использование GPT через Hugging Face Transformers позволяет легко интегрировать ИИ в проекты.
#факт
@zen_of_python
✍3
Онлайн-студия big tech night
Если вас не будет в Москве в день ивента, подключайтесь к нашей онлайн-студии. Мы подготовили огненную программу, которая отличается от офлайн-активностей:
🔴 Выступления спикеров от компаний-организаторов и других топов в индустрии
🔴 Микс форматов — от дискуссий и интервью до фановых историй из жизни разработчиков
🔴 Интерактивы с комментариями зрителей
Проведём сразу два прямых эфира:
✨ Студия Hard
В формате дискуссий и интервью обсудим сложные темы — управление IT-командой, AI в разработке, запуск проектов на несколько бизнесов.
✨ Студия Soft
Настоящая вечеринка в формате Late Night Show. Будем общаться, шутить и делиться сокровенным — например, обсудим необычные хобби и безумные pet-проекты.
❗️ Можно переключаться между студиями, чтобы поймать все самые интересные темы.
💻 Мы в эфире 12 сентября с 18:00 до 21:00
❤️Зарегистрируйтесь на сайте, чтобы получить ссылку на трансляцию
Подписывайтесь:
💬 big tech night
Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543
Это #партнёрский пост
Если вас не будет в Москве в день ивента, подключайтесь к нашей онлайн-студии. Мы подготовили огненную программу, которая отличается от офлайн-активностей:
🔴 Выступления спикеров от компаний-организаторов и других топов в индустрии
🔴 Микс форматов — от дискуссий и интервью до фановых историй из жизни разработчиков
🔴 Интерактивы с комментариями зрителей
Проведём сразу два прямых эфира:
✨ Студия Hard
В формате дискуссий и интервью обсудим сложные темы — управление IT-командой, AI в разработке, запуск проектов на несколько бизнесов.
✨ Студия Soft
Настоящая вечеринка в формате Late Night Show. Будем общаться, шутить и делиться сокровенным — например, обсудим необычные хобби и безумные pet-проекты.
❗️ Можно переключаться между студиями, чтобы поймать все самые интересные темы.
💻 Мы в эфире 12 сентября с 18:00 до 21:00
❤️Зарегистрируйтесь на сайте, чтобы получить ссылку на трансляцию
Подписывайтесь:
💬 big tech night
Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543
Это #партнёрский пост
❤1🗿1
Еще одна схема мошенничества на PyPi: освободившиеся домены
PyPI усиливает защиту аккаунтов от атак через «возрождение» доменов. С июня 2025 года система ежедневно проверяет статус доменов, связанных с адресами электронной почты пользователей. Если домен переходит в период восстановления или удаления, PyPI автоматически отменяет верификацию таких адресов, предотвращая возможность захвата аккаунта через сброс пароля. С начала июня более 1 800 адресов были размечены как ненадежные. Пользователям рекомендуется добавить вторичный адрес с надежного почтового сервиса и включить двухфакторную аутентификацию для повышения безопасности.
#безопасность
@zen_of_python
😈 — Если для мошенников в опенсорсе отдельный котел в аду
PyPI усиливает защиту аккаунтов от атак через «возрождение» доменов. С июня 2025 года система ежедневно проверяет статус доменов, связанных с адресами электронной почты пользователей. Если домен переходит в период восстановления или удаления, PyPI автоматически отменяет верификацию таких адресов, предотвращая возможность захвата аккаунта через сброс пароля. С начала июня более 1 800 адресов были размечены как ненадежные. Пользователям рекомендуется добавить вторичный адрес с надежного почтового сервиса и включить двухфакторную аутентификацию для повышения безопасности.
#безопасность
@zen_of_python
😈 — Если для мошенников в опенсорсе отдельный котел в аду
😈3❤1
Requests для начинающих + пара фишек для адептов
requests является де-факто стандартом для HTTP-запросов в Python. Она упрощает взаимодействие с веб-сервисами, предоставляя интуитивно понятный интерфейс для отправки запросов и обработки ответов.
Инструмент не входит в стандартную библиотеку ЯП, поэтому его необходимо установить отдельно:
Рекомендуется устанавливать внешние пакеты в виртуальное окружение, чтобы избежать конфликтов зависимостей.
Основные методы
Для получения данных с сервера используется метод
Для отправки данных на сервер используется метод
Ответы сервера
Статус-код запроса можно получить так:
Если ответ содержит JSON-данные, их можно преобразовать в Python-объект с помощью метода
Параметры запроса (params)
Параметры запроса можно передавать в виде словаря в params:
Requests автоматически кодирует параметры и добавляет их к URL.
Заголовки (Headers)
Заголовки запроса можно передавать в виде словаря в параметре
Это полезно для указания типа контента, авторизации и других параметров.
Другие HTTP-методы
Requests поддерживает все основные HTTP-методы:
🔘 requests.put() — для обновления;
🔘 requests.delete() — для удаления.
🔘 requests.head() — для получения только заголовков ответа;
🔘 requests.options() — для получения поддерживаемых сервером методов.
Подготовка запроса
Requests позволяет подготовить запрос:
Это полезно, если необходимо многократно отправлять одинаковые запросы с разными параметрами.
Аутентификация
Requests поддерживает базовую аутентификацию с помощью параметра
Также поддерживаются другие методы аутентификации, такие как OAuth.
Безопасность
Requests по умолчанию проверяет SSL-сертификаты при работе с HTTPS. Если необходимо отключить проверку (не рекомендуется в производственной среде), можно использовать параметр
Повторные попытки и сессии
Для улучшения производительности и управления соединениями рекомендуется использовать сессии:
Сессии позволяют повторно использовать соединения и сохранять параметры между запросами. Для автоматических повторных попыток в случае неудачи можно использовать библиотеку
#основы
@zen_of_python
requests является де-факто стандартом для HTTP-запросов в Python. Она упрощает взаимодействие с веб-сервисами, предоставляя интуитивно понятный интерфейс для отправки запросов и обработки ответов.
Инструмент не входит в стандартную библиотеку ЯП, поэтому его необходимо установить отдельно:
python -m pip install requests
Рекомендуется устанавливать внешние пакеты в виртуальное окружение, чтобы избежать конфликтов зависимостей.
Основные методы
Для получения данных с сервера используется метод
GET
:
import requests
response = requests.get('https://example.com')
print(response.text)
Для отправки данных на сервер используется метод
POST
:
import requests
data = {'key': 'value'}
response = requests.post('https://example.com', data=data)
print(response.text)
Ответы сервера
Статус-код запроса можно получить так:
print(response.status_code) # 200 — успешный запрос
Если ответ содержит JSON-данные, их можно преобразовать в Python-объект с помощью метода
json()
:
data = response.json()
Параметры запроса (params)
Параметры запроса можно передавать в виде словаря в params:
params = {'q': 'python'}
response = requests.get('https://example.com/search', params=params)
Requests автоматически кодирует параметры и добавляет их к URL.
Заголовки (Headers)
Заголовки запроса можно передавать в виде словаря в параметре
headers
:
headers = {'User-Agent': 'my-app'}
response = requests.get('https://example.com', headers=headers)
Это полезно для указания типа контента, авторизации и других параметров.
Другие HTTP-методы
Requests поддерживает все основные HTTP-методы:
Подготовка запроса
Requests позволяет подготовить запрос:
from requests import Request, Session
req = Request('GET', 'https://example.com', params={'q': 'python'})
prepared = req.prepare()
with Session() as session:
response = session.send(prepared)
print(response.text)
Это полезно, если необходимо многократно отправлять одинаковые запросы с разными параметрами.
Аутентификация
Requests поддерживает базовую аутентификацию с помощью параметра
auth
:
from requests.auth import HTTPBasicAuth
response = requests.get('https://example.com', auth=HTTPBasicAuth('user', 'pass'))
Также поддерживаются другие методы аутентификации, такие как OAuth.
Безопасность
Requests по умолчанию проверяет SSL-сертификаты при работе с HTTPS. Если необходимо отключить проверку (не рекомендуется в производственной среде), можно использовать параметр
verify
:
response = requests.get('https://example.com', verify=False)
Повторные попытки и сессии
Для улучшения производительности и управления соединениями рекомендуется использовать сессии:
with requests.Session() as session:
response = session.get('https://example.com')
print(response.text)
Сессии позволяют повторно использовать соединения и сохранять параметры между запросами. Для автоматических повторных попыток в случае неудачи можно использовать библиотеку
urllib3
вместе с Requests.#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
Forwarded from Типичный программист
Питонистам позалипать на вечер: вышла документалка про Python 🖥
История о том, как скромный проект из Амстердама 90-х превратился в движок для AI, дата-сайенса и топовых IT-компаний. За 90 минут документалка охватывает всё: первые коммиты, сомнения в будущем, почти забвение — и путь к славе.
В фильме — интервью с Гвидо ван Россумом, Трэвисом Олифантом (создатель NumPy), Барри Варшавом и другими ведущими разработчиками. Они делятся закулисьем жизни Python, моментами разногласий и тем, как язык стал незаменимым… ну, реально для всего.
История о том, как скромный проект из Амстердама 90-х превратился в движок для AI, дата-сайенса и топовых IT-компаний. За 90 минут документалка охватывает всё: первые коммиты, сомнения в будущем, почти забвение — и путь к славе.
В фильме — интервью с Гвидо ван Россумом, Трэвисом Олифантом (создатель NumPy), Барри Варшавом и другими ведущими разработчиками. Они делятся закулисьем жизни Python, моментами разногласий и тем, как язык стал незаменимым… ну, реально для всего.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6🔥2
По результатам опроса Python Software Foundation, в 2025 году, доля разработчиков, использующих FastAPI, выросла с 29 до 38%.
#кек
@zen_of_python
#кек
@zen_of_python
❤1
archivey | WinRAR больше не нужен
Библиотека предлагает унифицированный способ обращения с архивами .zip, .rar, .tar, .7z и другими форматами. Массовые создание и распаковка, обработка символических ссылок (symlink), управление правами доступа и паролями.
#инструмент
@zen_of_python
Библиотека предлагает унифицированный способ обращения с архивами .zip, .rar, .tar, .7z и другими форматами. Массовые создание и распаковка, обработка символических ссылок (symlink), управление правами доступа и паролями.
#инструмент
@zen_of_python
❤2😇1
Функции vs. метод в Python: разница
Тем, кто в языке первый год, разница между этими объектами может показаться неочевидной, для них и написан этот лонгрид.
Что такое функция?
Это блок кода, который принимает входные данные (аргументы), обрабатывает их и возвращает результат. Выделяют два типа:
1️⃣ без побочных эффектов — это чисто математические функции;
2️⃣ с побочными эффектами — функции, которые взаимодействуют с чем-то вне себя, например, с файлом, списком, базой данных или терминалом.
Пример чистой функции
Такая функция при одинаковых входных данных всегда возвращает один и тот же результат.
Пример функции с побочными эффектами:
Здесь функция использует внешний модуль
Что такое метод?
Это та же функция, которая принадлежит объекту класса. Пока определение запутывает, но посмотрите пример ниже. Здесь
#основы
@zen_of_python
Тем, кто в языке первый год, разница между этими объектами может показаться неочевидной, для них и написан этот лонгрид.
Что такое функция?
Это блок кода, который принимает входные данные (аргументы), обрабатывает их и возвращает результат. Выделяют два типа:
Пример чистой функции
def add(a, b):
return a + b
print(add(2, 3)) # Всегда возвращает 5
Такая функция при одинаковых входных данных всегда возвращает один и тот же результат.
Пример функции с побочными эффектами:
import random
def random_point():
x = random.randint(0, 10)
y = random.randint(0, 10)
return x, y
print(random_point()) # Каждый раз возвращает разные значения
Здесь функция использует внешний модуль
random
, и результат может меняться при каждом вызове. Это и есть побочный эффект.Что такое метод?
Это та же функция, которая принадлежит объекту класса. Пока определение запутывает, но посмотрите пример ниже. Здесь
set_name
— это метод, используемый только для объектов Employee
:
class Employee:
def set_name(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
# Создаём объекты
emp1 = Employee()
emp2 = Employee()
# Используем метод
emp1.set_name("Alice", "Smith")
emp2.set_name("Bob", "Brown")
print(emp1.first_name, emp1.last_name) # Alice Smith
print(emp2.first_name, emp2.last_name) # Bob Brown
#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1⚡1
tabulate | pretty-printed-таблицы в CLI
Библиотека сделает вывод датафрейма в консоль красивой. Поддерживает множество типов итерируемых объектов, может стилизовать вывод под GitHub, PSQL, LaTeX, Jira и проч. Самое оно для красоты в Google Colab.
#инструмент
@zen_of_python
Библиотека сделает вывод датафрейма в консоль красивой. Поддерживает множество типов итерируемых объектов, может стилизовать вывод под GitHub, PSQL, LaTeX, Jira и проч. Самое оно для красоты в Google Colab.
#инструмент
@zen_of_python
🔥5👍3
Про
В этом примере файл автоматически закроется после выхода из блока, даже если в процессе чтения произойдет исключение.
Как работает?
Оператор работает с объектами, реализующими протокол контекстного менеджера, то есть имеющими методы:
🔘
🔘
Примеры использования
Взаимодействие с базой данных:
Соединение с базой данных будет автоматически закрыто, даже если запрос вызовет исключение.
Зачем нужен with
🔘 Гарантирует, что ресурсы будут освобождены после использования;
🔘 Устраняет необходимость в явных блоках
🔘 Позволяет корректно обрабатывать исключения и освобождать ресурсы даже в случае ошибок;
🔘 Повышение читаемости.
#основы
@zen_of_python
with
with
позволяет обернуть выполнение блока кода в так называемый контекстный менеджер, который автоматически управляет ресурсами. Это особенно полезно для операций, требующих явного освобождения ресурсов, таких как работа с файлами, сетевыми соединениями или базами данных:
with open('example.txt', 'r') as file:
content = file.read()
print(content)
В этом примере файл автоматически закроется после выхода из блока, даже если в процессе чтения произойдет исключение.
Как работает?
Оператор работает с объектами, реализующими протокол контекстного менеджера, то есть имеющими методы:
__enter__()
: выполняется при входе в блок with. Готовит ресурс и возвращает его;__exit__()
: выполняется при выходе из блока. Отвечает за очистку ресурса, например, закрытие файла.Примеры использования
Взаимодействие с базой данных:
import sqlite3
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
Соединение с базой данных будет автоматически закрыто, даже если запрос вызовет исключение.
Зачем нужен with
try
/ finally
;#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1👨💻1
Как тестировать перенос и трансформацию данных без боли
В статье на Tproger представили практичный и понятный подход к тестированию ETL-процессов с использованием Python, Pytest и фикстур. Автор — Data QA, поделилась опытом автоматизации создания и наполнения таблиц, хранением схем и данных в JSON, а также сравнением результатов до и после трансформации.
Проект с минимальным стеком — pytest, allure и psycopg2. Статья будет полезна разработчикам и тестировщикам.
#основы
@zen_of_python
В статье на Tproger представили практичный и понятный подход к тестированию ETL-процессов с использованием Python, Pytest и фикстур. Автор — Data QA, поделилась опытом автоматизации создания и наполнения таблиц, хранением схем и данных в JSON, а также сравнением результатов до и после трансформации.
Проект с минимальным стеком — pytest, allure и psycopg2. Статья будет полезна разработчикам и тестировщикам.
#основы
@zen_of_python
👍2❤🔥1👾1
Как динамически изменять исходный код функций
В статье «Wicked Python Trickery» Эрик Ма делится необычным и мощным методом динамической модификации исходного кода функций во время выполнения программы.
Что за трюк?
В Python каждая функция имеет атрибут
Здесь мы создаём новый исходный код функции
Практическое применение
Эрик использовал этот метод для создания бота, который выбирает инструменты для выполнения, но не выполняет их сам. Вместо этого он генерирует Python-функции на лету, которые имеют доступ ко всем глобальным переменным текущего сеанса. Это позволяет создавать гибкие и мощные инструменты без необходимости заранее определять все возможные функции.
Этот подход позволяет LLM (Large Language Model) генерировать код, который может использовать текущие данные и функции, доступные в глобальном пространстве имён.
Риски безопасности
Однако такой подход сопряжён с серьёзными рисками. Выполнение сгенерированного кода без должной проверки может привести к выполнению вредоносных действий, таких как удаление файлов, утечка данных или атаки на внешние сервисы. Эрик отметил, что в текущей реализации отсутствует защита от таких угроз, и планирует использовать инструменты, такие как Restricted Python, для ограничения возможностей выполняемого кода.
#факт
@zen_of_python
В статье «Wicked Python Trickery» Эрик Ма делится необычным и мощным методом динамической модификации исходного кода функций во время выполнения программы.
Что за трюк?
В Python каждая функция имеет атрибут
.__code__
, который представляет собой объект байткода. Используя функции compile()
и exec()
, можно создать новый исходный код функции, скомпилировать его в байткод и выполнить в нужном пространстве имён. Это позволяет заменить поведение функции без её явного переопределения:
def something():
raise NotImplementedError()
new_code = """
def something(x: int) -> int:
return x * 2
"""
compiled = compile(new_code, "<magic>", "exec")
ns = {}
exec(compiled, {}, ns)
something_new = ns["something"]
print(something_new(21)) # Выведет 42
Здесь мы создаём новый исходный код функции
something
, компилируем его и выполняем в пустом пространстве имён. Затем извлекаем новую функцию из этого пространства и вызываем её.Практическое применение
Эрик использовал этот метод для создания бота, который выбирает инструменты для выполнения, но не выполняет их сам. Вместо этого он генерирует Python-функции на лету, которые имеют доступ ко всем глобальным переменным текущего сеанса. Это позволяет создавать гибкие и мощные инструменты без необходимости заранее определять все возможные функции.
Этот подход позволяет LLM (Large Language Model) генерировать код, который может использовать текущие данные и функции, доступные в глобальном пространстве имён.
Риски безопасности
Однако такой подход сопряжён с серьёзными рисками. Выполнение сгенерированного кода без должной проверки может привести к выполнению вредоносных действий, таких как удаление файлов, утечка данных или атаки на внешние сервисы. Эрик отметил, что в текущей реализации отсутствует защита от таких угроз, и планирует использовать инструменты, такие как Restricted Python, для ограничения возможностей выполняемого кода.
#факт
@zen_of_python
⚡5😱3👎1
Переменные окружения: введение
Переменные окружения — это данные, хранящиеся вне программы, которые могут влиять на её поведение. Например, ключ API или пароли, указанные в коде, будут доступны только при выполнении программы — и не попадут в публичный репозиторий. Такое хранение существенно повышает безопасность «переносимого» проекта.
Встроенный модуль
Простейший способ обратиться к средовой переменной в коде —
.env и python-dotenv
Общепринятая практика — хранить конфигурацию в файле .env и загружать переменные при старте скрипта:
Это удобно, упорядочивает конфигурацию и изолирует окружение от кода. Кстати, установка переменных внутри кода актуальна только для текущего процесса и его подпроцессов. После завершения скрипта изменения теряются и не влияют на внешнюю систему.
Без .env
Порой для простых проектов проще вообще не создавать файлов .env, можно экспортировать в виртуальное окружение переменную сразу. Как это делается в Unix или macOS:
В Windows CMD:
load_dotenv
Еще один удобный способ «вчитаться» во все средовые переменные в коде — функция load_dotenv().
Для нее потребуется установить библиотеку:
#основы
@zen_of_python
Переменные окружения — это данные, хранящиеся вне программы, которые могут влиять на её поведение. Например, ключ API или пароли, указанные в коде, будут доступны только при выполнении программы — и не попадут в публичный репозиторий. Такое хранение существенно повышает безопасность «переносимого» проекта.
Встроенный модуль
os
Простейший способ обратиться к средовой переменной в коде —
os.environ
:
import os
print(os.environ) # Вывести все переменные
val = os.environ['USER'] # Бросит KeyError, если нет
val = os.getenv('USER')
.env и python-dotenv
Общепринятая практика — хранить конфигурацию в файле .env и загружать переменные при старте скрипта:
# .env
API_KEY=abcdef
DB_URL=postgres://...
from dotenv import load_dotenv
import os
load_dotenv() # загрузка из .env
api_key = os.getenv('API_KEY')
Это удобно, упорядочивает конфигурацию и изолирует окружение от кода. Кстати, установка переменных внутри кода актуальна только для текущего процесса и его подпроцессов. После завершения скрипта изменения теряются и не влияют на внешнюю систему.
Без .env
Порой для простых проектов проще вообще не создавать файлов .env, можно экспортировать в виртуальное окружение переменную сразу. Как это делается в Unix или macOS:
export API_KEY="abcdef"
export API_SECRET="12345"
В Windows CMD:
set API_KEY=abcdef
set API_SECRET=12345
load_dotenv
Еще один удобный способ «вчитаться» во все средовые переменные в коде — функция load_dotenv().
Для нее потребуется установить библиотеку:
pip install python-dotenv
. И теперь функция считает все переменные, каким бы способом они ни были объявлены:
from dotenv import load_dotenv
load_dotenv()
#основы
@zen_of_python