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👨💻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
👍3❤🔥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😱4❤1👎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
✍3❤2
opendota2-vision | Ищем «смурфов» в Dota
Энтузиаст запилил проект на pytesseract, pillow, который находит в Dota2 «смурфов» — опытных игроков, которые создают новый аккаунт с низким рейтингом, чтобы играть против менее сильных соперников. Их цель — играть на «низком» уровне, где он явно сильнее большинства игроков, выигрывать легко и, как правило, доминировать в матчах.
#пет_проект
@zen_of_python
Энтузиаст запилил проект на pytesseract, pillow, который находит в Dota2 «смурфов» — опытных игроков, которые создают новый аккаунт с низким рейтингом, чтобы играть против менее сильных соперников. Их цель — играть на «низком» уровне, где он явно сильнее большинства игроков, выигрывать легко и, как правило, доминировать в матчах.
#пет_проект
@zen_of_python
🤪3
job-hunter | Для цифровых кочевников
Один энтузиаст создал трекер вакансий на удаленке, который ищет среди работных сайтов вроде GitHub, WorkingNomads и Remote.io подходящие объявления и высылает находки Telegram-ботом. Есть фильтрация по тегам. Если вам хочется поупражняться — форкайте и дописывайте под HH.
#пет-проект
@zen_of_python
Один энтузиаст создал трекер вакансий на удаленке, который ищет среди работных сайтов вроде GitHub, WorkingNomads и Remote.io подходящие объявления и высылает находки Telegram-ботом. Есть фильтрация по тегам. Если вам хочется поупражняться — форкайте и дописывайте под HH.
#пет-проект
@zen_of_python
👍1
Зацените как похорошели транскрибации при Войси!
Вайб-кодинг вайб-кодингом, но как же не хватает простого человеческого «расшифруй мне созвон, только качественно!!». С этим вам поможет Войси.
🤯Этот ИИ-агент может с легкостью сделать из созвона текст, подвести итоги встречи и составить саммари. Войси переводит с 54 языков на русский без всяких артефактов и составляет текст в аккуратные абзацы с выделенными тезисами.
Самое удобное, что далеко ходить не надо — всё это делается прямо в «телеге». Экономьте своё время, превращая часы в минуты.
🔥А новичкам доступны 1,5 часа бесплатной транскрибации. Забирайте: https://tprg.ru/9xQo
Вайб-кодинг вайб-кодингом, но как же не хватает простого человеческого «расшифруй мне созвон, только качественно!!». С этим вам поможет Войси.
🤯Этот ИИ-агент может с легкостью сделать из созвона текст, подвести итоги встречи и составить саммари. Войси переводит с 54 языков на русский без всяких артефактов и составляет текст в аккуратные абзацы с выделенными тезисами.
Самое удобное, что далеко ходить не надо — всё это делается прямо в «телеге». Экономьте своё время, превращая часы в минуты.
🔥А новичкам доступны 1,5 часа бесплатной транскрибации. Забирайте: https://tprg.ru/9xQo
👎1
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.
#обсуждение
@zen_of_python
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.
#обсуждение
@zen_of_python
❤3
Forwarded from MaaS — meme as a service (ex. Представляешь, )
Google Gemini разочаровался в себе и... предложил заплатить разработчику за баг
Во время переписки ИИ от Google честно признался: «Мои знания устарели, я только мешаю». При этом он предложил пользователю оплатить услуги настоящего программиста для решения проблем.
Причиной стали вечные конфликты Vite, Tailwind и PostCSS, в которых Gemini окончательно запутался. Вместо решения — депрессия и предложение нанять «кожаного программиста».
Ну что, работяги — можем спать спокойно? Никакой ИИ нас пока что не заменит
@your_tech
Во время переписки ИИ от Google честно признался: «Мои знания устарели, я только мешаю». При этом он предложил пользователю оплатить услуги настоящего программиста для решения проблем.
Причиной стали вечные конфликты Vite, Tailwind и PostCSS, в которых Gemini окончательно запутался. Вместо решения — депрессия и предложение нанять «кожаного программиста».
Ну что, работяги — можем спать спокойно? Никакой ИИ нас пока что не заменит
@your_tech
😢9❤2😁1