ОТКАЖИСЬ от этого в Python | 3 запретных инструмента

  Рет қаралды 3,017

Сурен Хоренян

Сурен Хоренян

Күн бұрын

Три встроенных в Python инструмента, которые не надо использовать. Эти инструменты вам не нужны. Для решения задач есть альтернативы, тоже встроенные.
Код тут gist.github.com/mahenzon/a99f...
Поддержать выход роликов (зарплата монтажеру)
- на Boosty boosty.to/mahenzon
- на Sponsr sponsr.ru/suren/
- через Tinkoff (любые карты) tinkoff.ru/cf/6kbKWtKhapM
- через CloudTips pay.cloudtips.ru/p/9a8fa641
Ссылки на соцсети:
- Канал в ТГ t.me/Khorenyan - тут в чате обсуждаем технологии и ваш код
- Паблик в ВК SurenKhorenyan
- Дискорд / discord
- KZbin: / @surenkhorenyan
- Второй канал на KZbin: / @surenlife
- RuTube rutube.ru/u/Suren/
- Все ссылки taplink.cc/mahenzon
Метки:
00:00 Начало
00:30 Так не делайте, используйте другое
10:03 Это тоже использовать надо, есть же встроенные инструменты
31:20 Вот это точно никогда нельзя использовать, прям совсем
36:45 Спасибо

Пікірлер: 41
@BritScientist
@BritScientist 23 күн бұрын
Вот так, например, можно добавить распаковку: def __iter__(self): return iter((self.x, self.y))
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Кстати, да! Не подумал о том, что она реально нужна. Всё же это довольно редкий кейс - распаковывать классы в переменные.
@BritScientist
@BritScientist 23 күн бұрын
@@SurenKhorenyan просто чтобы поддержать возможности интерфейса именованных кортежей, раз речь идет о них.
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
​@@BritScientist в этом плане да, тогда есть смысл 🙂
@catstyle1101
@catstyle1101 22 күн бұрын
А если во вложенной сортировке надо еще и изменить направление только в одном из параметров? Только лямбда в таком случае?
@SurenKhorenyan
@SurenKhorenyan 22 күн бұрын
Ага, тут уже оператор не поможет, напор свою функцию писать
@MrEligos
@MrEligos 23 күн бұрын
в dataclasses dataclass используется exec. ну и при создании декоратора класса, в генерации методов, без exec тяжко лямбда тоже для передачи в функцию считаю норм, читается хорошо, сразу понятно, что происходит, ошибки не генирит
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Что происходит под капотом питона это ок. Я говорю про выполнение этого в нашем коде. Где при создании декоратора нужен exec? Сможете привести пример? Думаю, можно обойтись без exec Лямбда ошибки не генерит, всё так. С ней другая проблема - создание лишней функции, когда уже есть готовая и более быстрая
@IvaNFallout
@IvaNFallout 23 күн бұрын
Каждый инструмент хорош в конкретном случае. Не нужно бояться eval, порой без него просто не обойтись, но использовать его нужно с осторожностью, это факт Если инструмент есть, значит он кому-нибудь да понадобится
@user-zx6fq1ig4h
@user-zx6fq1ig4h 23 күн бұрын
Приведи пример, когда без eval не обойтись
@IvaNFallout
@IvaNFallout 23 күн бұрын
@@user-zx6fq1ig4hК примеру, на одном из проектов мы храним в БД правила расчета эффективности. Менеджер в любой момент может установить новые правила, от разработчиков не требуется вносить изменения в существующий код приложения и запускать весь процесс ci/cd
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Пока не знаю ситуаций, где без eval не обойтись. Сможете привести пример? Да, инструменты выполняют свои задачи. И я показываю, что есть более подходящие инструменты для этих же задач
@IvaNFallout
@IvaNFallout 23 күн бұрын
@@SurenKhorenyan Из личного опыта. Был проект, в котором мы хранили формулы во внешнем хранилище. Было требование от бизнеса, что формулы могут меняться несколько раз в день. Можно было бы придумать механизм расчета таких показателей на стороне СУБД, но sql трудно поддается автоматизированному тестированию и для нас это стало решающим фактором в пользу eval
@SurenKhorenyan
@SurenKhorenyan 22 күн бұрын
@@IvaNFallout ох, жуткий пример. Уверен, можно было сделать иначе, хотя бы хранимой функцией, ну или инструмент построить для этого. Я бы с удовольствием поработал над такой задачей
@MAKS19961204
@MAKS19961204 23 күн бұрын
Неймд тюплы все любят (ну или уже любили, возможно) за их скорость по сравнению с классами. Точно помню такое. Насколько большая разница между неймд тюплом и датаклассом с фрозеном и слотами?
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
По памяти датакласс frozen + slots занимает чуть меньше. По скорости не проверял. А что подразумевается в скорости? Время инициализации?
@MAKS19961204
@MAKS19961204 23 күн бұрын
@@SurenKhorenyan если память не подводит то да, про инициализацию речь шла. Это хорошо ощутимо на тысячах объектов.
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
@@MAKS19961204 надо будет прочекать. Допускаю, что тюпл действительно быстрее, так как там меньше магии
@dmitry-lz1ny
@dmitry-lz1ny 23 күн бұрын
Про operator уже давно не слышал. По моему люди чаще используют генераторы или лямбды. Про скорость я не знаю, возможно оператор даже быстрее. Ну и возможно людям не нравится ещё один импорт тянуть
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Как генератор может помочь в данном случае? Лямбда работает медленнее оператора, потому что оператор это по сути то же самое, что мы пишем просто как оператор: a + b. А если делать через лямбду, то нужно ещё сначала вызвать функцию, а это занимает время
@saitaro
@saitaro 22 күн бұрын
Я не думаю, что из-за dataclass теперь не стоит использовать NamedTuple. Во-первых, иногда распаковка прямо требуется, и нет смысла писать костыли для датакласса с перечислением всех атрибутов, которых может быть много. Во-вторых, когда создают кортеж, обычно понимают его свойства сравнения, и равенство двух кортежей разных классов как равенство их атрибутов может быть прямо желательно.
@SurenKhorenyan
@SurenKhorenyan 22 күн бұрын
Если у вас в распаковке используется много элементов, что-то явно не так.. страшно представить распаковку пяти элементов на одной строчке. А если ошибиться в порядке? Сравнивать два разных типа на равенство и ждать истину вообще какая-то странная идея. Пока из вашего сообщения не представляю реального кейса
@saitaro
@saitaro 22 күн бұрын
@@SurenKhorenyan Да даже если немного распаковывать, в датаклассе всё равно нужно писать костыль, а зачем, если не нужен его функционал? Для случая сравнения можно представить, что координаты разных типов магазинов хранятся как кортежи разных названий для удобства. Может понадобиться сравнивать просто по координатам и проводить проверку isinstance где-то ещё. Это первое что пришло в голову. Вообще векторы разной природы могут совпадать по координатам, но не по бытовому смыслу.
@SurenKhorenyan
@SurenKhorenyan 22 күн бұрын
@@saitaro любопытно, но пока не могу для себя представить использование в реальной ситуации
@progweb3036
@progweb3036 23 күн бұрын
operator.countOf написан по camelCase, ужас... A на счёт того что нету прямого оператора - заменителя этой функции, я согласен, но у простого списка по моему был метод count с идентичным функционалом
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Да, наследие старого питона. Угу, такой метод есть, но для этого нужно создать весь список, а это не подходит, так как займёт память
@user-jw9fx1xk5s
@user-jw9fx1xk5s 23 күн бұрын
Есть случаи когда без lambda не обойтись. Например в pyqt когда требуется подключить слот с аргументом к сигналу.
@SurenKhorenyan
@SurenKhorenyan 22 күн бұрын
Там тоже можно без лямбды, я вот делал: github.com/mahenzon/robohand-gui-control/blob/76a325c4468dbd2addaf8e75105fdf89ded40bef/app/widgets/debounced_slider.py#L35
@user-jw9fx1xk5s
@user-jw9fx1xk5s 22 күн бұрын
@@SurenKhorenyan Это не то). У функции self.slider_changed нет аргументов, а речь о том как передать в функцию self.slider_changed аргументы не вызывая функцию? Такой вариант self.valueChanged.connect(self.slider_changed(arg)) не сработает)
@SurenKhorenyan
@SurenKhorenyan 22 күн бұрын
@@user-jw9fx1xk5s для этого есть пара разных вариантов: либо делать обёртку типа класса с методом __call__, этот аргумент в __init__ закидывать. Либо через partial просто
@Kocherga38
@Kocherga38 23 күн бұрын
Спасибо за видео!
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Пожалуйста!
@dmitry-lz1ny
@dmitry-lz1ny 23 күн бұрын
Магия питона прекрасна, но её стоит использовать, когда ты уже понимаешь, как оно там работает. Иначе вы просто закапсулируетесь в питоне и если когда то понадобится что то на другом язык написать, то габела. То есть не нужно игнорировать алгоритмы. Но автор канала сам ролики по алгосам выпускает, то есть это просто пожелание новичкам.
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Всё так, понимать нужно, но не обязательно сразу закапываться
@dmitry-lz1ny
@dmitry-lz1ny 23 күн бұрын
@@SurenKhorenyan Не ну если пойдешь в бигтех устраиваться и тем более в яндекс, то там тебя только так алгоритмами задрючат. По моему не так важно на кого ты идешь. Там в любом случае спрашивают алгоритмы. А так на питоне они не сильно актуальны, а вот на более низких языках уже чуть нужнее. К примеру в гошке им найдется применение ибо там почти нет магии.
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Из крупняков яндекс больше всех и дрючит по алгоритмам, у них там на это пунктик. У других попроще и более приближенные задачи (их тех, с кем я сталкивался). Алгоритмы сильно актуальны на любом языке. Пройти по списку за O(n^2) или O(n)? Существенная разница
@dmitry-lz1ny
@dmitry-lz1ny 23 күн бұрын
@@SurenKhorenyan Да. В принципе это один из столпов программиста
@Qustoos
@Qustoos 23 күн бұрын
Отличное видео!
@SurenKhorenyan
@SurenKhorenyan 23 күн бұрын
Кайф, спасибо! Рад, что вам понравилось!
Indian sharing by Secret Vlog #shorts
00:13
Secret Vlog
Рет қаралды 57 МЛН
ДЕНЬ РОЖДЕНИЯ БАБУШКИ #shorts
00:19
Паша Осадчий
Рет қаралды 6 МЛН
格斗裁判暴力执法!#fighting #shorts
00:15
武林之巅
Рет қаралды 94 МЛН
КАРМАНЧИК 2 СЕЗОН 6 СЕРИЯ
21:57
Inter Production
Рет қаралды 469 М.
Логирование: оставь print позади
38:01
Python Russian
Рет қаралды 17 М.
Парсим админку Мегамаркета с помощью скрытых API
30:56
Алексей Куличевский
Рет қаралды 27 М.
Собеседование на Tech Lead программиста в США
7:18
Миша Ларченко
Рет қаралды 12 М.
First Missing Positive | Решение на Python | LeetCode 41
27:10
Сурен Хоренян
Рет қаралды 364
👎Главный МИНУС планшета Apple🍏
0:29
Demin's Lounge
Рет қаралды 511 М.
Выложил СВОЙ АЙФОН НА АВИТО #shorts
0:42
Дмитрий Левандовский
Рет қаралды 1,5 МЛН
5 НЕЛЕГАЛЬНЫХ гаджетов, за которые вас посадят
0:59
Кибер Андерсон
Рет қаралды 1,1 МЛН
iPhone 15 Pro vs Samsung s24🤣 #shorts
0:10
Tech Tonics
Рет қаралды 10 МЛН
What model of phone do you have?
0:16
Hassyl Joon
Рет қаралды 70 М.