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

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

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

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

Күн бұрын

Три встроенных в 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
- KZfaq: / @surenkhorenyan
- Второй канал на KZfaq: / @surenlife
- RuTube rutube.ru/u/Suren/
- Все ссылки taplink.cc/mahenzon
Метки:
00:00 Начало
00:30 Так не делайте, используйте другое
10:03 Это тоже использовать надо, есть же встроенные инструменты
31:20 Вот это точно никогда нельзя использовать, прям совсем
36:45 Спасибо

Пікірлер: 41
@BritScientist
@BritScientist 29 күн бұрын
Вот так, например, можно добавить распаковку: def __iter__(self): return iter((self.x, self.y))
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Кстати, да! Не подумал о том, что она реально нужна. Всё же это довольно редкий кейс - распаковывать классы в переменные.
@BritScientist
@BritScientist 29 күн бұрын
@@SurenKhorenyan просто чтобы поддержать возможности интерфейса именованных кортежей, раз речь идет о них.
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
​@@BritScientist в этом плане да, тогда есть смысл 🙂
@catstyle1101
@catstyle1101 28 күн бұрын
А если во вложенной сортировке надо еще и изменить направление только в одном из параметров? Только лямбда в таком случае?
@SurenKhorenyan
@SurenKhorenyan 28 күн бұрын
Ага, тут уже оператор не поможет, напор свою функцию писать
@MrEligos
@MrEligos 29 күн бұрын
в dataclasses dataclass используется exec. ну и при создании декоратора класса, в генерации методов, без exec тяжко лямбда тоже для передачи в функцию считаю норм, читается хорошо, сразу понятно, что происходит, ошибки не генирит
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Что происходит под капотом питона это ок. Я говорю про выполнение этого в нашем коде. Где при создании декоратора нужен exec? Сможете привести пример? Думаю, можно обойтись без exec Лямбда ошибки не генерит, всё так. С ней другая проблема - создание лишней функции, когда уже есть готовая и более быстрая
@MAKS19961204
@MAKS19961204 29 күн бұрын
Неймд тюплы все любят (ну или уже любили, возможно) за их скорость по сравнению с классами. Точно помню такое. Насколько большая разница между неймд тюплом и датаклассом с фрозеном и слотами?
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
По памяти датакласс frozen + slots занимает чуть меньше. По скорости не проверял. А что подразумевается в скорости? Время инициализации?
@MAKS19961204
@MAKS19961204 29 күн бұрын
@@SurenKhorenyan если память не подводит то да, про инициализацию речь шла. Это хорошо ощутимо на тысячах объектов.
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
@@MAKS19961204 надо будет прочекать. Допускаю, что тюпл действительно быстрее, так как там меньше магии
@dmitry-lz1ny
@dmitry-lz1ny 29 күн бұрын
Про operator уже давно не слышал. По моему люди чаще используют генераторы или лямбды. Про скорость я не знаю, возможно оператор даже быстрее. Ну и возможно людям не нравится ещё один импорт тянуть
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Как генератор может помочь в данном случае? Лямбда работает медленнее оператора, потому что оператор это по сути то же самое, что мы пишем просто как оператор: a + b. А если делать через лямбду, то нужно ещё сначала вызвать функцию, а это занимает время
@saitaro
@saitaro 28 күн бұрын
Я не думаю, что из-за dataclass теперь не стоит использовать NamedTuple. Во-первых, иногда распаковка прямо требуется, и нет смысла писать костыли для датакласса с перечислением всех атрибутов, которых может быть много. Во-вторых, когда создают кортеж, обычно понимают его свойства сравнения, и равенство двух кортежей разных классов как равенство их атрибутов может быть прямо желательно.
@SurenKhorenyan
@SurenKhorenyan 28 күн бұрын
Если у вас в распаковке используется много элементов, что-то явно не так.. страшно представить распаковку пяти элементов на одной строчке. А если ошибиться в порядке? Сравнивать два разных типа на равенство и ждать истину вообще какая-то странная идея. Пока из вашего сообщения не представляю реального кейса
@saitaro
@saitaro 28 күн бұрын
@@SurenKhorenyan Да даже если немного распаковывать, в датаклассе всё равно нужно писать костыль, а зачем, если не нужен его функционал? Для случая сравнения можно представить, что координаты разных типов магазинов хранятся как кортежи разных названий для удобства. Может понадобиться сравнивать просто по координатам и проводить проверку isinstance где-то ещё. Это первое что пришло в голову. Вообще векторы разной природы могут совпадать по координатам, но не по бытовому смыслу.
@SurenKhorenyan
@SurenKhorenyan 28 күн бұрын
@@saitaro любопытно, но пока не могу для себя представить использование в реальной ситуации
@IvaNFallout
@IvaNFallout 29 күн бұрын
Каждый инструмент хорош в конкретном случае. Не нужно бояться eval, порой без него просто не обойтись, но использовать его нужно с осторожностью, это факт Если инструмент есть, значит он кому-нибудь да понадобится
@user-zx6fq1ig4h
@user-zx6fq1ig4h 29 күн бұрын
Приведи пример, когда без eval не обойтись
@IvaNFallout
@IvaNFallout 29 күн бұрын
@@user-zx6fq1ig4hК примеру, на одном из проектов мы храним в БД правила расчета эффективности. Менеджер в любой момент может установить новые правила, от разработчиков не требуется вносить изменения в существующий код приложения и запускать весь процесс ci/cd
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Пока не знаю ситуаций, где без eval не обойтись. Сможете привести пример? Да, инструменты выполняют свои задачи. И я показываю, что есть более подходящие инструменты для этих же задач
@IvaNFallout
@IvaNFallout 28 күн бұрын
@@SurenKhorenyan Из личного опыта. Был проект, в котором мы хранили формулы во внешнем хранилище. Было требование от бизнеса, что формулы могут меняться несколько раз в день. Можно было бы придумать механизм расчета таких показателей на стороне СУБД, но sql трудно поддается автоматизированному тестированию и для нас это стало решающим фактором в пользу eval
@SurenKhorenyan
@SurenKhorenyan 28 күн бұрын
@@IvaNFallout ох, жуткий пример. Уверен, можно было сделать иначе, хотя бы хранимой функцией, ну или инструмент построить для этого. Я бы с удовольствием поработал над такой задачей
@progweb3036
@progweb3036 29 күн бұрын
operator.countOf написан по camelCase, ужас... A на счёт того что нету прямого оператора - заменителя этой функции, я согласен, но у простого списка по моему был метод count с идентичным функционалом
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Да, наследие старого питона. Угу, такой метод есть, но для этого нужно создать весь список, а это не подходит, так как займёт память
@user-jw9fx1xk5s
@user-jw9fx1xk5s 28 күн бұрын
Есть случаи когда без lambda не обойтись. Например в pyqt когда требуется подключить слот с аргументом к сигналу.
@SurenKhorenyan
@SurenKhorenyan 28 күн бұрын
Там тоже можно без лямбды, я вот делал: github.com/mahenzon/robohand-gui-control/blob/76a325c4468dbd2addaf8e75105fdf89ded40bef/app/widgets/debounced_slider.py#L35
@user-jw9fx1xk5s
@user-jw9fx1xk5s 28 күн бұрын
@@SurenKhorenyan Это не то). У функции self.slider_changed нет аргументов, а речь о том как передать в функцию self.slider_changed аргументы не вызывая функцию? Такой вариант self.valueChanged.connect(self.slider_changed(arg)) не сработает)
@SurenKhorenyan
@SurenKhorenyan 28 күн бұрын
@@user-jw9fx1xk5s для этого есть пара разных вариантов: либо делать обёртку типа класса с методом __call__, этот аргумент в __init__ закидывать. Либо через partial просто
@Kocherga38
@Kocherga38 29 күн бұрын
Спасибо за видео!
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Пожалуйста!
@Qustoos
@Qustoos 29 күн бұрын
Отличное видео!
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Кайф, спасибо! Рад, что вам понравилось!
@dmitry-lz1ny
@dmitry-lz1ny 29 күн бұрын
Магия питона прекрасна, но её стоит использовать, когда ты уже понимаешь, как оно там работает. Иначе вы просто закапсулируетесь в питоне и если когда то понадобится что то на другом язык написать, то габела. То есть не нужно игнорировать алгоритмы. Но автор канала сам ролики по алгосам выпускает, то есть это просто пожелание новичкам.
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Всё так, понимать нужно, но не обязательно сразу закапываться
@dmitry-lz1ny
@dmitry-lz1ny 29 күн бұрын
@@SurenKhorenyan Не ну если пойдешь в бигтех устраиваться и тем более в яндекс, то там тебя только так алгоритмами задрючат. По моему не так важно на кого ты идешь. Там в любом случае спрашивают алгоритмы. А так на питоне они не сильно актуальны, а вот на более низких языках уже чуть нужнее. К примеру в гошке им найдется применение ибо там почти нет магии.
@SurenKhorenyan
@SurenKhorenyan 29 күн бұрын
Из крупняков яндекс больше всех и дрючит по алгоритмам, у них там на это пунктик. У других попроще и более приближенные задачи (их тех, с кем я сталкивался). Алгоритмы сильно актуальны на любом языке. Пройти по списку за O(n^2) или O(n)? Существенная разница
@dmitry-lz1ny
@dmitry-lz1ny 29 күн бұрын
@@SurenKhorenyan Да. В принципе это один из столпов программиста
Основы Asyncio
53:25
Python Russian
Рет қаралды 10 М.
100❤️
00:20
Nonomen ノノメン
Рет қаралды 63 МЛН
Универ. 13 лет спустя - ВСЕ СЕРИИ ПОДРЯД
9:07:11
Комедии 2023
Рет қаралды 1,8 МЛН
WHY IS A CAR MORE EXPENSIVE THAN A GIRL?
00:37
Levsob
Рет қаралды 19 МЛН
Backstage 🤫 tutorial #elsarca #tiktok
00:13
Elsa Arca
Рет қаралды 27 МЛН
OPENSOURCE НЕ БЕЗОПАСЕН? (2024)
17:20
PLAFON - Канал о линуксе
Рет қаралды 22 М.
Способы учиться программировать
14:21
Как в 44 года стать программистом на Python. Объясняю с чего начать.
19:32
i love you subscriber ♥️ #iphone #iphonefold #shortvideo
0:14
Si pamerR
Рет қаралды 1,6 МЛН
Карточка Зарядка 📱 ( @ArshSoni )
0:23
EpicShortsRussia
Рет қаралды 709 М.
Не обзор DJI Osmo Pocket 3 Creator Combo
1:00
superfirsthero
Рет қаралды 1,3 МЛН
How charged your battery?
0:14
V.A. show / Магика
Рет қаралды 4,1 МЛН
Best Beast Sounds Handsfree For Multi Phone
0:42
MUN HD
Рет қаралды 339 М.