#python python... PYTHON 🔛 🚀
11 subscribers
914 photos
7 videos
158 files
1.54K links
Download Telegram
Forwarded from Data Whisperer
Python, как швейцарский нож.
Forwarded from DE
🖼️ Загадка

t = (1, 2, [3, 4])
t[2] += [5, 6]
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DE
Опросы в телеге не поддерживают форматирование кода, дублирую код для проверки:

t = (1, 2, [3, 4])
try:
t[2] += [5, 6]
except TypeError as err:
print(err)
print(t)


Это патология Python.
Из такого примера ты можешь сделать следующие выводы:

1️⃣ Не помещай изменяемые элементы в кортежи.
2️⃣ Составное присваивание -- не атомарная операция
3️⃣ Иногда следует изучать байт-код, чтобы понять, что происходит под капотом


Удобный ресурс для пошагового исполнения кода с визуализацией - pythontutor.com

#python #quiz #blowmymind
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DE
🖼️
И в дополнение к патологии выше, есть целый репозиторий с подобными штуками - ссылка

#python #wtfpython
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DE
🖥 Python-разработчики подверглись сложной атаке на цепочку поставок

Аналитики компании Checkmarx сообщили, что после загрузки вредоносного клона популярной утилиты Colorama несколько Python-разработчиков, включая сопровождающего Top.gg, оказались заражены малварью, похищающей информацию. По мнению специалистов, основной целью кампании, скорее всего, была кража данных и их последующая монетизация.

Атака началась аж в ноябре 2022 года, когда хакеры впервые загрузили вредоносные пакеты в Python Package Index (PyPI). В последующие годы на PyPI было добавлено еще больше пакетов с малварью. Все они были похожи на популярные опенсорсные инструменты, что повышало вероятность их попадания в результаты поисковых систем.

Утилита Colorama, которую в числе прочих подделали злоумышленники, обеспечивает работу последовательностей символов ANSI в Windows и в настоящее время насчитывает более 150 млн загрузок ежемесячно.

Чтобы организовать атаку на цепочку поставок, хакеры клонировали эту утилиту, внедрили в нее вредоносный код и разместили вредоносную версию на поддельном домене. Благодаря тому, что атакующие использовали тайпсквоттинг, сайт хакеров (files.pypihosted[.]org) походил на легитимное зеркало files.pythonhosted.org.

Для распространения вредоносного пакета злоумышленники не только создали вредоносные репозитории под собственными учетными записями, но также взломали ряд известных аккаунтов. В их числе был GitHub-аккаунт editor-syntax, поддерживающий платформу для поиска и обнаружения серверов, ботов и других социальных инструментов в Discord, Top.gg, сообщество которой насчитывает более 170 000 участников.

Аккаунт, скорее всего, был взломан через украденные cookies, которые злоумышленники использовали для обхода аутентификации и выполнения вредоносных действий, при этом не зная пароля аккаунта. В результате взлома пострадали несколько членов сообщества Top.gg.

📎 Читать подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Dmitry Kosarevsky
попробуй такое, сам не читал, но говорят норм
Forwarded from DE
Если тебе интересно заглянуть под капот Python и узнать, как устроены списки - есть отличная статья, которая начинается с достаточно простого примера и потом плавно погружает в глубины C-шной реализации списков в Python.

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

Даже если ты никогда не программировал на C, тебе будет понятен и интересен материал.

Ссылка на статью, рекомендую ознакомиться — это на самом деле увлекательно 🙂

#python
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DE
И ещё немного про Python.

Полезно тем, кто уже освоился с f-строками в Python и использует их для форматирования. Часто ты останавливаешься на чём-то вроде f"string {variable}", но знаешь ли ты, что f-строки скрывают в себе гораздо больше возможностей?

Например, представь, что тебе нужно превратить число в строку, где оно всегда будет занимать три позиции, дополняясь нулями спереди, если это необходимо. С f-строками это сделать проще простого! Если у тебя число 5, ты получишь "005", а если 123, то останется просто "123".

Гайд от PyBites показывает, на что способны f-строки. Если ты ещё не раскрыл для себя все возможности этого удобного инструмента - бегом читать 🙃

Ссылка

А ещё по f-строкам у меня была ссылка на другой хороший материал в посте

#python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Как использовать инструменты статического анализа в коде Python

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

В статье мы подробно разберем несколько инструментов статического анализа с открытым ПО для Python. Посмотрим, как они работают и улучшают процесс программирования.

Читать

@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
import sqlite3
from functools import wraps

def create_cache_table():
conn = sqlite3.connect("cache.db")
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS cache (input text, output text)")
conn.commit()
conn.close()

def drop_cache_table():
conn = sqlite3.connect("cache.db")
c = conn.cursor()
c.execute("DROP TABLE IF EXISTS cache")
conn.commit()
conn.close()

def store_in_cache(input, output):
create_cache_table()
conn = sqlite3.connect("cache.db")
c = conn.cursor()
c.execute("INSERT INTO cache VALUES (?,?)", (input, output))
conn.commit()
conn.close()

def retrieve_from_cache(input):
create_cache_table()
conn = sqlite3.connect("cache.db")
c = conn.cursor()
c.execute("SELECT output FROM cache WHERE input=?", (input,))
result = c.fetchone()
conn.close()
if result:
return result[0]
return None

def cache(func):
@wraps(func)
def wrapper(input):
output = retrieve_from_cache(input)
if output is not None:
print("# from cache: ", end='\t')
return output
else:
print("# new question: ", end='\t')
output = func(input)
store_in_cache(input, output)
return output
return wrapper

@cache
def get_answer(input):
ai_dict = {
"who are you" : "stupid algorithm)",
"2 + 2": '4',
}
return '\t'*3 + ai_dict.get(input, "I don't khow
🤷‍♂️")

def test():
drop_cache_table()
test_ai_qsts = [
"who are you",
"2 + 2",
"who are you",
"ok"
]
for q in test_ai_qsts:
print(
q, get_answer(q),
sep=' -> \n',
)

if __name__ == '__main__':
test()


@getcher полный код кэширования ответов
Forwarded from DataEng
100 самых популярных Python докладов

Нашел в сети подборку из 100 самых просматриваемых докладов про Python: 100 most-watched Python 2023 conference talks ordered by the number of views
Среди этих докладов популярны темы про Rust, data engineering и оптимизацию производительности.

К слову, PyCon US 2024 уже прошел, но в открытом доступе до сих пор нет докладов. Надеюсь на их скорое появление, т.к. там есть на что посмотреть.
Simplifying the Python Code for Data Engineering Projects
Оригинальная статья (10 min read)

Стоит прочитать или нет? Сделали краткое содержание 🙌


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

Ввод данных
📌 Использование yield для обработки больших наборов данных: yield позволяет создавать генераторы, которые возвращают по одному элементу за раз вместо загрузки всех данных в память. Это особенно полезно при работе с большими наборами данных, так как позволяет экономить память и ускорять процесс обработки данных.

📌 Обработка данных частями: Вместо того чтобы загружать все данные сразу, можно обрабатывать их порциями (batch processing). Это помогает избежать проблем с памятью и позволяет начать обработку данных до завершения их полной загрузки.

Проверка данных
📌 Использование библиотеки Pydantic для проверки полей данных: Pydantic позволяет определить схему данных с использованием моделей Python. Эти модели используются для проверки данных на соответствие заданным правилам и форматам, что помогает обеспечить их целостность и точность.

📌 Реализация пользовательских правил проверки: Pydantic поддерживает создание пользовательских валидаторов, которые могут проверять значения полей на соответствие определенным критериям (например, допустимым значениям платежных методов). Это позволяет дополнительно контролировать качество данных.

Обработка данных
📌 Применение декораторов Python для измерения времени выполнения: Декораторы позволяют оборачивать функции дополнительным функционалом без изменения их исходного кода. Например, можно создать декоратор для измерения времени выполнения функций, что помогает выявлять узкие места и оптимизировать производительность.

📌 Использование функциональных методов программирования (map, filter, reduce):
- map применяется для выполнения одной и той же операции над всеми элементами списка (например, добавление суффикса к значениям платежных методов).
- filter позволяет отфильтровать элементы списка, которые соответствуют определенным условиям (например, оставить только записи с платежным методом "Cryptocurrency").
- reduce используется для получения единственного значения из списка (например, суммирование всех значений).

Тестирование конвейера данных
📌 Использование фреймворка Pytest для модульного тестирования: Pytest предоставляет мощные возможности для написания и выполнения тестов, что позволяет убедиться в правильности работы отдельных компонентов системы. Например, можно тестировать функции обработки данных, чтобы удостовериться, что они корректно выполняют свои задачи.

📌 Проверка качества выходных данных и обнаружение ошибок: Тестирование помогает выявлять логические ошибки и несоответствия на ранних стадиях разработки. Это особенно важно для сложных конвейеров данных, где ошибки могут быть трудно обнаружимыми.

Лучшие практики
📌 Поддержка ясного и модульного кода:
Структурированный и модульный код облегчает его понимание, поддержку и масштабирование. Разделение кода на логические модули и функции помогает управлять сложностью проекта.

📌 Интеграция тестирования и проверки данных: Тестирование и проверка данных должны быть неотъемлемой частью рабочего процесса. Это помогает обеспечить высокое качество данных и надежность работы системы в целом.


#почитать
На днях мне подкинули интересный канал https://t.me/press_any_button , рекомендую присмотреться, особенно начинающим разработчикам 🐍

Авторы публикуют различные гайды по python, разработке на django, использованию docker, написанию ботов с aiogram и по другим темам. Так же разбирают различные задачи на python. Описание контента в одном посте можно посмотреть тут https://t.me/press_any_button/738 👈

Для тех кто только начинает своей погружение в мир разработки, рекомендую начать читать канал с самых первых постов, можно последовательно пройти через уроки разработки сайтов с самого нуля 🎓, если вам подходит django.
# Материалы к докладу на PYCON RUSSIA: "Долгая дорога к JIT"

Уже завтра стартует pycon, а я как обычно в последний день переделываю весь доклад 😂. Выкладываю материалы по докладу для зрителей. Завтра после выступления выложу в канал презентацию, но полноценные видео записи придется какое-то время подождать.

## Про cpython и байткод

- Афонасьев Евгений - А побыстрее можно? - доклад про оптимизации в работе с байтокодом, в рамках него я подробно рассказываю, что такое байткод и как с ним работает cpython (ru)
- Афонасьев Евгений - адаптируйся или умри - в рамках доклада подробно разбирается, как работает Specializing Adaptive Interpreter (ru)

## Про JIT в целом

- разбор базовых приемов для JIT на примере простой С программы (ru)
- пример написания JIT для brainfuck и не только (eng)
- пример написания jit для lua (eng)

## Изменения в python последних лет

- как выглядит DSL для байткода в исходном коде cpython (eng)
- спецификация DSL для байткода (eng)
- ранний дизайн tier2 оптимизатора (uops) (eng)
- PEP 669 – Low Impact Monitoring for CPython (eng)
- PEP 689 – Unstable C API tier (eng)

## PEP 744 – JIT Compilation

- Brandt Bucher – A JIT Compiler for CPython презентация для кор девелоперов (eng)
- JIT в Python | Никита Соболев доклад от core developer (ru)
- PR с добавлением JIT (eng)
- PEP про JIT, написанный и принятый уже после мержа изменений (eng)
- обсуждение PEP (eng)
- научная публикация про copy-and-patch jit (eng)
- хорошая статья с простым разъяснением нового JIT в python (eng)

#pycon
Выложили в паблик полный плейлист докладов с ekbpy 🔥

От себя рекомендую ознакомиться с докладами

🤜 Николай Марков - Управление пакетами - хорошее, плохое, злое? - основательный исторический обзор инструментов управления пакетами в python, какими они были, какие они сейчас?
🤜 Александр Гончаров. Чистый код: антипаттерны в питоне, и как с ними бороться - бодро, весело, задорно про типичные антипаттерны, хорошая подача, юмор
🤜 Аль Амин Ужахов. Как внутри работает Litestar? - про интересные особенности внутреннего устройства фреймворка

#ekbpy
https://peps.python.org/pep-0751/

Вы не ждали и не просили, но он пришел. Очередной pep про стандартный формат lock файлов для фиксации версий транзитивных зависимостей в python. Автор уже давно бьется за право принять подобный pep, и может быть в этот раз ему сопутствует удача. Все же лютый зоопарк решений (poentry, pipenv, pdm, rye) пора уже привести к какому-то общему знаменателю.

Пример нового формата
PEP 665 – A file format to list Python dependencies for reproducibility of an application - последний откланенный pep от этого же автора