Безопасная подстановка значений в SQL — не через f-строки!
Никогда не вставляй пользовательские данные напрямую в SQL-запросы. Используй параметризацию — это защищает от SQL-инъекций и делает код надёжнее.
Разъяснивший Python
Никогда не вставляй пользовательские данные напрямую в SQL-запросы. Используй параметризацию — это защищает от SQL-инъекций и делает код надёжнее.
Разъяснивший Python
💯1
Как реализовать анти-спам бота?
В данной статье автор рассказывает, как сделал для Телеграм-канала анти-спам бота. Ты узнаешь, почему не все решения подойдут для такой задачи, и как ChatGPT может облегчить задачу.
Читать...
Разъяснивший Python
В данной статье автор рассказывает, как сделал для Телеграм-канала анти-спам бота. Ты узнаешь, почему не все решения подойдут для такой задачи, и как ChatGPT может облегчить задачу.
Читать...
Разъяснивший Python
Хабр
Как ChatGPT удалил в нашем чате 555 спам-сообщений с точностью 98,38%
Небольшой православный телеграм-канал на ~4 тыс. чел., где я состою в числе редакторов, ежедневно атакуют спамеры. Ввиду его тематики к обычному спаму прибавляется еще и разный специфический, о чем я...
Атрибуты класса и атрибуты экземпляра (ч.1)
Переменные класса и переменные в экземплярах класса внутренне обрабатываются как словари объекта класса. Если имя переменной не найдено в словаре текущего класса, выполняется поиск по нему в родительских классах.
Разъяснивший Python
Переменные класса и переменные в экземплярах класса внутренне обрабатываются как словари объекта класса. Если имя переменной не найдено в словаре текущего класса, выполняется поиск по нему в родительских классах.
Разъяснивший Python
Атрибуты класса и атрибуты экземпляра (ч.2)
+= Оператор изменяет изменяемый объект на месте, не создавая новый объект. Таким образом, изменение атрибута одного экземпляра влияет на другие экземпляры, а также на атрибут class.
Разъяснивший Python
+= Оператор изменяет изменяемый объект на месте, не создавая новый объект. Таким образом, изменение атрибута одного экземпляра влияет на другие экземпляры, а также на атрибут class.
Разъяснивший Python
Масштабирование глубокого обучения с помощью Horovod и Kubernetes
В этой статье пойдет речь о том, как масштабировать модельки с помощью Horovod и Kubernetes.
Читать...
Разъяснивший Python
В этой статье пойдет речь о том, как масштабировать модельки с помощью Horovod и Kubernetes.
Читать...
Разъяснивший Python
Хабр
Масштабирование глубокого обучения с помощью Horovod и Kubernetes
Привет, Хабр! Horovod — это фреймворк для распределенного глубокого обучения, изначально разработанный в Uber . Он позволяет масштабировать обучение моделей на сотни и тысячи GPU, сокращая время...
Уступая от ... return! (ч.1)
Куда "wtf" делся? Это из-за какого-то особого эффекта yield from?
Начиная с Python 3.3, стало возможным использовать return инструкцию со значениями внутри генераторов (см. PEP380). В официальных документах говорится, что,
"... return expr в генераторе возникают причины StopIteration(expr), которые возникают при выходе из генератора".
Разъяснивший Python
Куда "wtf" делся? Это из-за какого-то особого эффекта yield from?
Начиная с Python 3.3, стало возможным использовать return инструкцию со значениями внутри генераторов (см. PEP380). В официальных документах говорится, что,
"... return expr в генераторе возникают причины StopIteration(expr), которые возникают при выходе из генератора".
Разъяснивший Python
Уступая от ... return! (ч.2)
В случае с some_func(3), StopIteration возникает в начале из-за return заявления. StopIteration Исключение автоматически перехватывается внутри list(...) оболочки и for цикла. Следовательно, два приведенных выше фрагмента приводят к пустому списку.
Чтобы получить ["wtf"] от генератора some_func, нам нужно перехватить StopIteration исключение.
Разъяснивший Python
В случае с some_func(3), StopIteration возникает в начале из-за return заявления. StopIteration Исключение автоматически перехватывается внутри list(...) оболочки и for цикла. Следовательно, два приведенных выше фрагмента приводят к пустому списку.
Чтобы получить ["wtf"] от генератора some_func, нам нужно перехватить StopIteration исключение.
Разъяснивший Python
Условное присваивание с оператором or
Иногда нужно задать значение по умолчанию, если переменная пуста или None. Вместо длинной конструкции if, можно использовать короткий трюк.
Итог:
Оператор or — удобный способ задать значение по умолчанию, когда переменная может быть пустой, None, 0 или ''. Упрощает код и делает его чище.
Разъяснивший Python
Иногда нужно задать значение по умолчанию, если переменная пуста или None. Вместо длинной конструкции if, можно использовать короткий трюк.
Итог:
Оператор or — удобный способ задать значение по умолчанию, когда переменная может быть пустой, None, 0 или ''. Упрощает код и делает его чище.
Разъяснивший Python
Nan-рефлексивность (ч.1)
'inf' и 'nan' - это специальные строки (без учета регистра), которые при явном приведении к float типу используются для представления математической "бесконечности" и "не числа" соответственно.
Поскольку, согласно стандартам IEEE NaN != NaN, соблюдение этого правила нарушает предположение о рефлексивности элемента коллекции в Python, т. Е. если x является частью коллекции, подобной list, реализации, подобные comparison, основаны на предположении, что x == x.
Разъяснивший Python
'inf' и 'nan' - это специальные строки (без учета регистра), которые при явном приведении к float типу используются для представления математической "бесконечности" и "не числа" соответственно.
Поскольку, согласно стандартам IEEE NaN != NaN, соблюдение этого правила нарушает предположение о рефлексивности элемента коллекции в Python, т. Е. если x является частью коллекции, подобной list, реализации, подобные comparison, основаны на предположении, что x == x.
Разъяснивший Python
Используй enumerate вместо счётчиков вручную
Когда нужно одновременно итерироваться по элементам и знать их индекс — не нужно делать это вручную!
Итог:
enumerate — твой друг при работе с индексами в цикле. Это Pythonic и избавляет от лишнего кода.
Разъяснивший Python
Когда нужно одновременно итерироваться по элементам и знать их индекс — не нужно делать это вручную!
Итог:
enumerate — твой друг при работе с индексами в цикле. Это Pythonic и избавляет от лишнего кода.
Разъяснивший Python
Распаковка словаря в аргументы функции
Иногда нужно передать значения из словаря в функцию — можно сделать это красиво и лаконично.
data автоматически распакует ключи словаря как имена аргументов, а значения — как аргументы функции.
Итог:
Когда у тебя есть словарь с нужными данными, не передавай каждый параметр вручную — просто используй . Это сокращает код и повышает читаемость.
Разъяснивший Python
Иногда нужно передать значения из словаря в функцию — можно сделать это красиво и лаконично.
data автоматически распакует ключи словаря как имена аргументов, а значения — как аргументы функции.
Итог:
Когда у тебя есть словарь с нужными данными, не передавай каждый параметр вручную — просто используй . Это сокращает код и повышает читаемость.
Разъяснивший Python
Nan-рефлексивность (ч.2)
Из-за прошлого предположения сначала сравнивается идентификатор (поскольку это быстрее) при сравнении двух элементов, а значения сравниваются только тогда, когда идентификаторы не совпадают.
Поскольку идентификаторы x и y различны, учитываются значения, которые также различны; следовательно, сравнение возвращается False на этот раз.
Разъяснивший Python
Из-за прошлого предположения сначала сравнивается идентификатор (поскольку это быстрее) при сравнении двух элементов, а значения сравниваются только тогда, когда идентификаторы не совпадают.
Поскольку идентификаторы x и y различны, учитываются значения, которые также различны; следовательно, сравнение возвращается False на этот раз.
Разъяснивший Python
Быстрая проверка времени выполнения с timeit
Иногда нужно быстро узнать, сколько времени занимает тот или иной фрагмент кода. Вместо написания таймеров — используй модуль timeit.
Модуль timeit точно измеряет производительность фрагмента кода и учитывает мелкие колебания времени.
Итог:
timeit — отличный инструмент для быстрой и точной оценки производительности. Удобен для сравнений разных реализаций алгоритмов и оптимизаций.
Разъяснивший Python
Иногда нужно быстро узнать, сколько времени занимает тот или иной фрагмент кода. Вместо написания таймеров — используй модуль timeit.
Модуль timeit точно измеряет производительность фрагмента кода и учитывает мелкие колебания времени.
Итог:
timeit — отличный инструмент для быстрой и точной оценки производительности. Удобен для сравнений разных реализаций алгоритмов и оптимизаций.
Разъяснивший Python
Распознаватель PDF-счетов
Данный проект позволяет извлекать нужные даннгые из PDF-документов. Работает следующим образом: сначала читается текст из PDF, находим дату, номер, сумму и поставщика, а затем сохраняем данные в JSON. При желании ты можешь переделать поиск под свои нужды.
Ссылка на код
Разъяснивший Python
Данный проект позволяет извлекать нужные даннгые из PDF-документов. Работает следующим образом: сначала читается текст из PDF, находим дату, номер, сумму и поставщика, а затем сохраняем данные в JSON. При желании ты можешь переделать поиск под свои нужды.
Ссылка на код
Разъяснивший Python
"Изменение" неизменяемого! (ч.1)
Это может показаться тривиальным, если вы знаете, как работают ссылки в Python.
Цитирую из https://docs.python.org/3/reference/datamodel.html
Неизменяемые последовательности Объект неизменяемого типа последовательности не может измениться после его создания. (Если объект содержит ссылки на другие объекты, эти другие объекты могут быть изменяемыми и могут быть изменены; однако коллекция объектов, на которые непосредственно ссылается неизменяемый объект, не может измениться.)
Разъяснивший Python
Это может показаться тривиальным, если вы знаете, как работают ссылки в Python.
Цитирую из https://docs.python.org/3/reference/datamodel.html
Неизменяемые последовательности Объект неизменяемого типа последовательности не может измениться после его создания. (Если объект содержит ссылки на другие объекты, эти другие объекты могут быть изменяемыми и могут быть изменены; однако коллекция объектов, на которые непосредственно ссылается неизменяемый объект, не может измениться.)
Разъяснивший Python
Исчезающая переменная из внешней области (ч.1)
Когда исключение было назначено с использованием as target, оно очищается в конце except предложения.
Это означает, что исключению должно быть присвоено другое имя, чтобы иметь возможность ссылаться на него после предложения except. Исключения удаляются, потому что с привязкой к ним обратной трассировки они образуют ссылочный цикл с фреймом стека, сохраняя все локальные файлы в этом фрейме живыми до тех пор, пока не произойдет следующая сборка мусора.
Разъяснивший Python
Когда исключение было назначено с использованием as target, оно очищается в конце except предложения.
Это означает, что исключению должно быть присвоено другое имя, чтобы иметь возможность ссылаться на него после предложения except. Исключения удаляются, потому что с привязкой к ним обратной трассировки они образуют ссылочный цикл с фреймом стека, сохраняя все локальные файлы в этом фрейме живыми до тех пор, пока не произойдет следующая сборка мусора.
Разъяснивший Python
Проверка типов переменной с помощью typing.get_origin и typing.get_args
Когда ты работаешь с аннотациями типов (особенно с Union, List[int], Optional[str] и т.п.), стандартной проверки isinstance() недостаточно.
Это удобно, когда ты хочешь программно проанализировать или валидировать типы в декораторах, валидаторах, фреймворках и библиотеках.
Итог:
С помощью get_origin и get_args ты можешь "распаковать" сложные типы и точно понимать, что за структура стоит за аннотацией. Очень полезно при создании универсальных функций или фреймворков.
Разъяснивший Python
Когда ты работаешь с аннотациями типов (особенно с Union, List[int], Optional[str] и т.п.), стандартной проверки isinstance() недостаточно.
Это удобно, когда ты хочешь программно проанализировать или валидировать типы в декораторах, валидаторах, фреймворках и библиотеках.
Итог:
С помощью get_origin и get_args ты можешь "распаковать" сложные типы и точно понимать, что за структура стоит за аннотацией. Очень полезно при создании универсальных функций или фреймворков.
Разъяснивший Python
Исчезающая переменная из внешней области (ч.2)
Эти предложения не ограничены в Python. Все в примере присутствует в той же области видимости, а переменная e была удалена из-за выполнения except предложения. То же самое не относится к функциям, которые имеют свои отдельные внутренние области.
В Python 2.x имя переменной e присваивается Exception() экземпляру, поэтому при попытке печати ничего не выводится.
Разъяснивший Python
Эти предложения не ограничены в Python. Все в примере присутствует в той же области видимости, а переменная e была удалена из-за выполнения except предложения. То же самое не относится к функциям, которые имеют свои отдельные внутренние области.
В Python 2.x имя переменной e присваивается Exception() экземпляру, поэтому при попытке печати ничего не выводится.
Разъяснивший Python
Таинственное преобразование типа ключа (ч.1)
И объект, s и строка "s" имеют одинаковое значение, потому что SomeClass наследуют hash метод str класса.
SomeClass("s") == "s" вычисляется как, True потому что SomeClass также наследует eq метод от str класса.
Разъяснивший Python
И объект, s и строка "s" имеют одинаковое значение, потому что SomeClass наследуют hash метод str класса.
SomeClass("s") == "s" вычисляется как, True потому что SomeClass также наследует eq метод от str класса.
Разъяснивший Python
👎1
Таинственное преобразование типа ключа (ч.2)
Поскольку оба объекта имеют одинаковое значение и равны, они представлены одним и тем же ключом в словаре.
Для желаемого поведения мы можем переопределить eq метод в SomeClass
Разъяснивший Python
Поскольку оба объекта имеют одинаковое значение и равны, они представлены одним и тем же ключом в словаре.
Для желаемого поведения мы можем переопределить eq метод в SomeClass
Разъяснивший Python