Forwarded from Коробка с питоном
Создание временных файлов
В процессе написания скрипта может потребоваться создание временных файлов, которые будут удалены автоматически после завершения работы скрипта или обработки файла.
Это может быть полезно по разным причинам - при обработке больших данных (которые не вместятся в буфер) или при проведении сложных операций (например, можно создать временный файл и натравить на него ffmpeg).
Для решения этих проблем в Python есть модуль
В процессе написания скрипта может потребоваться создание временных файлов, которые будут удалены автоматически после завершения работы скрипта или обработки файла.
Это может быть полезно по разным причинам - при обработке больших данных (которые не вместятся в буфер) или при проведении сложных операций (например, можно создать временный файл и натравить на него ffmpeg).
Для решения этих проблем в Python есть модуль
tempfile
. Нас интересует 2 функции - это TemporaryFile
и NamedTemporaryFile
.TemporaryFile
позволяет создать безымянный временный файл. Вот так можно создать временный текстовой файл, открыть его на запись и чтение (за это отвечает первый аргумент "w+t"
, подробнее можно прочитать здесь):from tempfile import TemporaryFile
with TemporaryFile("w+t") as t:
t.write("Hello, boxwithpython!")
t.seek(0)
data = t.read()
NamedTemporaryFile
используется для более продвинутых сценариев, так как он создает файл с именем, поэтому мы можем получить путь к нему и использовать его для дальнейших целей:from tempfile import
NamedTemporaryFile
with NamedTemporaryFile("w+t") as t:#std
t.write("Hello, boxwithpython!")
print(t.name) # /tmp/tmpljhsktjt
Forwarded from Коробка с питоном
Про __slots__
Python, аналогично другим динамическим языкам, таким как JavaScript, предоставляет возможность манипулирования объектами в рантайме, в том числе позволяет добавлять, изменять и удалять атрибуты. Цена этого – понижение скорости доступа к атрибутам и дополнительные расходы памяти.
Такое поведение нужно не всегда. Бывают случаи, когда мы точно знаем, какие атрибуты будут у наших экземпляров классов. Или же мы хотим ограничить добавление новых атрибутов. Именно для этого и существует
Слоты задаются через атрибут
В свою очередь, память экономится из-за того, что у класса не создается
#std #slots
Python, аналогично другим динамическим языкам, таким как JavaScript, предоставляет возможность манипулирования объектами в рантайме, в том числе позволяет добавлять, изменять и удалять атрибуты. Цена этого – понижение скорости доступа к атрибутам и дополнительные расходы памяти.
Такое поведение нужно не всегда. Бывают случаи, когда мы точно знаем, какие атрибуты будут у наших экземпляров классов. Или же мы хотим ограничить добавление новых атрибутов. Именно для этого и существует
__slots__
.Слоты задаются через атрибут
__slots__
в классе:class SlotsClass:Теперь мы не можем добавлять новые атрибуты к нашим объектам. Скорость доступа к атрибутам повышается на 25-30%, потому что при доступе к ним их больше не надо вычислять.
slots = ('foo', 'bar')
>>> obj = SlotsClass()
>>> obj.foo = 5
>>> obj.foo
# 5
>>> obj.another_attribute = 'test'
Traceback (most recent call last):
File "python", line 5, in <module>
AttributeError: 'SlotsClass' object has no attribute 'another_attribute'
В свою очередь, память экономится из-за того, что у класса не создается
__dict__
, который как раз хранил атрибуты.#std #slots
Forwarded from Коробка с питоном
Коробка с питоном
Про __slots__ Python, аналогично другим динамическим языкам, таким как JavaScript, предоставляет возможность манипулирования объектами в рантайме, в том числе позволяет добавлять, изменять и удалять атрибуты. Цена этого – понижение скорости доступа к атрибутам…
__slots__ и наследование
Важно помнить, что при попытке унаследовать класс с
Из-за этого возникает неоднозначность, какой именно слот использовать в результирующем классе.
#std #slots
Важно помнить, что при попытке унаследовать класс с
__slots__
подкласс их унаследует, но так же и создаст __dict__
для новых атрибутов:class SlotsClass:Это стандартное и понятное поведение. Чтобы избежать создания
__slots__ = ('foo', 'bar')
class ChildSlotsClass(SlotsClass):
pass
>>> obj = ChildSlotsClass()
>>> obj.__slots__
# ('foo', 'bar')
>>> obj.foo = 5
>>> obj.test = 3
>>> obj.__dict__
# {'test': 3}
__dict__
, можно снова переопределить __slots__
в подклассе:class SlotsClass:А что с множественным наследованием?
__slots__ = ('foo', 'bar')
class ChildSlotsClass(SlotsClass):
__slots__ = ('baz',)
>>> obj = ChildSlotsClass()
>>> obj.foo = 5
>>> obj.baz = 6
>>> obj.something_new = 3
AttributeError: 'ChildSlotsClass' object has no attribute 'something_new'
class ClassA:Оно не работает. Потому-что каждый класс может иметь свои собственные
__slots__ = ('foo', 'bar',)
class ClassB:
__slots__ = ('baz',)
class C(ClassA, ClassB):
pass
TypeError: multiple bases have instance lay-out conflict
__slots__
, которые могут пересекаться с другими классами, а это может привести к тому, что объекты могут быть созданы неправильно или будут иметь непредсказуемое поведение. Из-за этого возникает неоднозначность, какой именно слот использовать в результирующем классе.
#std #slots
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
Опросы в телеге не поддерживают форматирование кода, дублирую код для проверки:
Это патология Python.
Из такого примера ты можешь сделать следующие выводы:
1️⃣ Не помещай изменяемые элементы в кортежи.
2️⃣ Составное присваивание -- не атомарная операция
3️⃣ Иногда следует изучать байт-код, чтобы понять, что происходит под капотом
Удобный ресурс для пошагового исполнения кода с визуализацией - pythontutor.com
#python #quiz #blowmymind
t = (1, 2, [3, 4])
try:
t[2] += [5, 6]
except TypeError as err:
print(err)
print(t)
Это патология Python.
Из такого примера ты можешь сделать следующие выводы:
Удобный ресурс для пошагового исполнения кода с визуализацией - 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
GitHub
GitHub - satwikkansal/wtfpython: What the f*ck Python? 😱
What the f*ck Python? 😱. Contribute to satwikkansal/wtfpython development by creating an account on GitHub.
Forwarded from DE
files.pypihosted[.]org
) походил на легитимное зеркало files.pythonhosted.org.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DE
Если тебе интересно заглянуть под капот Python и узнать, как устроены списки - есть отличная статья, которая начинается с достаточно простого примера и потом плавно погружает в глубины C-шной реализации списков в Python.
Автор статьи серьёзно подошёл к делу: он не только детально всё расписал, но и приложил кучу наглядных иллюстраций.
Даже если ты никогда не программировал на C, тебе будет понятен и интересен материал.
Ссылка на статью, рекомендую ознакомиться — это на самом деле увлекательно🙂
#python
Автор статьи серьёзно подошёл к делу: он не только детально всё расписал, но и приложил кучу наглядных иллюстраций.
Даже если ты никогда не программировал на C, тебе будет понятен и интересен материал.
Ссылка на статью, рекомендую ознакомиться — это на самом деле увлекательно
#python
Please open Telegram to view this post
VIEW IN TELEGRAM
Codingconfessions
Why Do Python Lists Multiply Oddly? Exploring the CPython Source Code
A look at the internals of list implementation in CPython to understand this weird quirk about them
Forwarded from DE
И ещё немного про Python.
Полезно тем, кто уже освоился с f-строками в Python и использует их для форматирования. Часто ты останавливаешься на чём-то вроде
Например, представь, что тебе нужно превратить число в строку, где оно всегда будет занимать три позиции, дополняясь нулями спереди, если это необходимо. С f-строками это сделать проще простого! Если у тебя число 5, ты получишь
Гайд от PyBites показывает, на что способны f-строки. Если ты ещё не раскрыл для себя все возможности этого удобного инструмента - бегом читать🙃
Ссылка
А ещё по f-строкам у меня была ссылка на другой хороший материал в посте
#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
Pybites
Python F-String Codes I Use Every Day - Pybites
I use f-strings every day. The irony is I also every day end up searching the Web to find the correct format to use. Until one day I thought a
Forwarded from Анализ данных (Data analysis)
За последние несколько лет статические анализаторы кода значительно оптимизировали разработку приложений. Статический анализ избавляет от необходимости отыскивать ошибки и уязвимости в системе продакшн или среде развертывания, указывая участок предполагаемого сбоя на основе типизации и других подсказок кода.
В статье мы подробно разберем несколько инструментов статического анализа с открытым ПО для Python. Посмотрим, как они работают и улучшают процесс программирования.
▪ Читать
@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Николай Крупий
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 уже прошел, но в открытом доступе до сих пор нет докладов. Надеюсь на их скорое появление, т.к. там есть на что посмотреть.
Нашел в сети подборку из 100 самых просматриваемых докладов про Python: 100 most-watched Python 2023 conference talks ordered by the number of views
Среди этих докладов популярны темы про Rust, data engineering и оптимизацию производительности.
К слову, PyCon US 2024 уже прошел, но в открытом доступе до сих пор нет докладов. Надеюсь на их скорое появление, т.к. там есть на что посмотреть.
Forwarded from Newprolab: обучение DE и DS
Simplifying the Python Code for Data Engineering Projects
Оригинальная статья (10 min read)
Статья исследует различные техники и лучшие практики для повышения эффективности и читаемости кода на Python в проектах по обработке данных. Она охватывает важные аспекты, такие как ввод данных, их проверка, обработка и тестирование конвейера, используя встроенные функции и библиотеки Python.
Ввод данных
📌 Использование
📌 Обработка данных частями: Вместо того чтобы загружать все данные сразу, можно обрабатывать их порциями (batch processing). Это помогает избежать проблем с памятью и позволяет начать обработку данных до завершения их полной загрузки.
Проверка данных
📌 Использование библиотеки Pydantic для проверки полей данных: Pydantic позволяет определить схему данных с использованием моделей Python. Эти модели используются для проверки данных на соответствие заданным правилам и форматам, что помогает обеспечить их целостность и точность.
📌 Реализация пользовательских правил проверки: Pydantic поддерживает создание пользовательских валидаторов, которые могут проверять значения полей на соответствие определенным критериям (например, допустимым значениям платежных методов). Это позволяет дополнительно контролировать качество данных.
Обработка данных
📌 Применение декораторов Python для измерения времени выполнения: Декораторы позволяют оборачивать функции дополнительным функционалом без изменения их исходного кода. Например, можно создать декоратор для измерения времени выполнения функций, что помогает выявлять узкие места и оптимизировать производительность.
📌 Использование функциональных методов программирования (
-
-
-
Тестирование конвейера данных
📌 Использование фреймворка Pytest для модульного тестирования: Pytest предоставляет мощные возможности для написания и выполнения тестов, что позволяет убедиться в правильности работы отдельных компонентов системы. Например, можно тестировать функции обработки данных, чтобы удостовериться, что они корректно выполняют свои задачи.
📌 Проверка качества выходных данных и обнаружение ошибок: Тестирование помогает выявлять логические ошибки и несоответствия на ранних стадиях разработки. Это особенно важно для сложных конвейеров данных, где ошибки могут быть трудно обнаружимыми.
Лучшие практики
📌 Поддержка ясного и модульного кода:
Структурированный и модульный код облегчает его понимание, поддержку и масштабирование. Разделение кода на логические модули и функции помогает управлять сложностью проекта.
📌 Интеграция тестирования и проверки данных: Тестирование и проверка данных должны быть неотъемлемой частью рабочего процесса. Это помогает обеспечить высокое качество данных и надежность работы системы в целом.
#почитать
Оригинальная статья (10 min read)
Стоит прочитать или нет? Сделали краткое содержание 🙌
Статья исследует различные техники и лучшие практики для повышения эффективности и читаемости кода на Python в проектах по обработке данных. Она охватывает важные аспекты, такие как ввод данных, их проверка, обработка и тестирование конвейера, используя встроенные функции и библиотеки Python.
Ввод данных
📌 Использование
yield
для обработки больших наборов данных: yield
позволяет создавать генераторы, которые возвращают по одному элементу за раз вместо загрузки всех данных в память. Это особенно полезно при работе с большими наборами данных, так как позволяет экономить память и ускорять процесс обработки данных.📌 Обработка данных частями: Вместо того чтобы загружать все данные сразу, можно обрабатывать их порциями (batch processing). Это помогает избежать проблем с памятью и позволяет начать обработку данных до завершения их полной загрузки.
Проверка данных
📌 Использование библиотеки Pydantic для проверки полей данных: Pydantic позволяет определить схему данных с использованием моделей Python. Эти модели используются для проверки данных на соответствие заданным правилам и форматам, что помогает обеспечить их целостность и точность.
📌 Реализация пользовательских правил проверки: Pydantic поддерживает создание пользовательских валидаторов, которые могут проверять значения полей на соответствие определенным критериям (например, допустимым значениям платежных методов). Это позволяет дополнительно контролировать качество данных.
Обработка данных
📌 Применение декораторов Python для измерения времени выполнения: Декораторы позволяют оборачивать функции дополнительным функционалом без изменения их исходного кода. Например, можно создать декоратор для измерения времени выполнения функций, что помогает выявлять узкие места и оптимизировать производительность.
📌 Использование функциональных методов программирования (
map, filter, reduce
):-
map
применяется для выполнения одной и той же операции над всеми элементами списка (например, добавление суффикса к значениям платежных методов).-
filter
позволяет отфильтровать элементы списка, которые соответствуют определенным условиям (например, оставить только записи с платежным методом "Cryptocurrency").-
reduce
используется для получения единственного значения из списка (например, суммирование всех значений).Тестирование конвейера данных
📌 Использование фреймворка Pytest для модульного тестирования: Pytest предоставляет мощные возможности для написания и выполнения тестов, что позволяет убедиться в правильности работы отдельных компонентов системы. Например, можно тестировать функции обработки данных, чтобы удостовериться, что они корректно выполняют свои задачи.
📌 Проверка качества выходных данных и обнаружение ошибок: Тестирование помогает выявлять логические ошибки и несоответствия на ранних стадиях разработки. Это особенно важно для сложных конвейеров данных, где ошибки могут быть трудно обнаружимыми.
Лучшие практики
📌 Поддержка ясного и модульного кода:
Структурированный и модульный код облегчает его понимание, поддержку и масштабирование. Разделение кода на логические модули и функции помогает управлять сложностью проекта.
📌 Интеграция тестирования и проверки данных: Тестирование и проверка данных должны быть неотъемлемой частью рабочего процесса. Это помогает обеспечить высокое качество данных и надежность работы системы в целом.
#почитать
Medium
Simplifying the Python Code for Data Engineering Projects
Python tricks and techniques for data ingestion, validation, processing, and testing: a practical walkthrough
Forwarded from Афонасьев Евгений - IT, Python и вот это все
На днях мне подкинули интересный канал https://t.me/press_any_button , рекомендую присмотреться, особенно начинающим разработчикам 🐍
Авторы публикуют различные гайды по python, разработке на django, использованию docker, написанию ботов с aiogram и по другим темам. Так же разбирают различные задачи на python. Описание контента в одном посте можно посмотреть тут https://t.me/press_any_button/738 👈
Для тех кто только начинает своей погружение в мир разработки, рекомендую начать читать канал с самых первых постов, можно последовательно пройти через уроки разработки сайтов с самого нуля 🎓, если вам подходит django.
Авторы публикуют различные гайды по python, разработке на django, использованию docker, написанию ботов с aiogram и по другим темам. Так же разбирают различные задачи на python. Описание контента в одном посте можно посмотреть тут https://t.me/press_any_button/738 👈
Для тех кто только начинает своей погружение в мир разработки, рекомендую начать читать канал с самых первых постов, можно последовательно пройти через уроки разработки сайтов с самого нуля 🎓, если вам подходит django.
Telegram
Код на салфетке
Канал для тех, кому интересно программирование на Python и не только.
Сайт канала: https://pressanybutton.ru/
Чат канала: https://t.me/+Li2vbxfWo0Q4ZDk6
Заметки автора: https://t.me/writeanynotes
Реклама и взаимопиар: @Murzyev1995
Сайт канала: https://pressanybutton.ru/
Чат канала: https://t.me/+Li2vbxfWo0Q4ZDk6
Заметки автора: https://t.me/writeanynotes
Реклама и взаимопиар: @Murzyev1995