Дженерики в Python 3.12 - Обзор и лайфхаки
Vložit
- čas přidán 30. 04. 2024
- Показываю, как работают дженерики в Python 3.12.
Погружение в Backend разработку за 3 месяца - научись писать API с нуля до вывода в продакшен на моем авторском курсе: clck.ru/3AHCap (есть 3 бесплатных урока)
🚨 Продажи открыты только до 31 мая 2024 года! 🚨
Прочитать отзывы к курсу можно на Stepik: clck.ru/3AHCbf
Пишу про свой проект для подготовки к собеседованиям, рынок труда и способы развития разработчиков в телеграм канале - подписывайся: t.me/artemshumeiko
Python сообщество в телеграме (здесь тебе помогут с любым вопросом): t.me/python_community_rus
Поддержать меня и получить ранний доступ к видео можно здесь: boosty.to/artemshumeiko
#шумейко
Погружение в Backend разработку за 3 месяца - научись писать API с нуля до вывода в продакшен на моем авторском курсе: clck.ru/3AHCap (есть 3 бесплатных урока)
Курс доступен для приобретения только до 31 мая 2024 года.
Прочитать отзывы к курсу можно на Stepik: clck.ru/3AHCbf
С чего это вдруг динамическая типизация -- недостаток? Зачем вообще делают ЯП с динамической типизацией? Потому что статический анализатор написать не получилось?)
Потеря производительности + сложность отладки и обнаружения ошибок
да. потому что хотели упростить язык а такой статический анализатор как например у F# сразу не спроектировали. а потом язык взлетел и уже поздно делать ломающие изменения
Артем при вызове функции как использовать дженерики как в ts?
Охуж эти дженерики. Я такой на TS съел, чуть не отравился😂
Крутая вещь, но возникает вопрос. Как тогда проверять, что наш тип, который будет возвращать функция, например, является интеджер, или как сделать чтобы он был только интеджер?
Писать функции на плюсах 😂
Проверку типа можно организовать через isinstance. Однако в питоне нет возможности через сам TypeVar проводить манипуляции с типами, поэтому только так.
Да норм. Дженерики и в курсе по фастапям пригодятся) полиморфные репозитории можно делать
А что же будет после 31-го мая, другой курс?) Пока что звучит как выстрел себе в ногу
Нового курса не будет. После 31 мая нельзя будет попасть на курс.
В течение этого года хочу сделать рефокус с курса на свой IT продукт, на это нужно время. Поэтому я набираю тех людей, кто хочет изучить backend разработку и найти работу разработчиком, и закрываю вход.
Я, конечно, люблю питон (мой первый язык как никак), но от таких нововведений появляется ощущение, что они (разрабы) пытаются догонять другие языки в плане строгой статической типизации. Невольно появляется мысль "может сразу использовать джаву или шарп"... Но его сахарный синтаксис в каком-то смысле того стоит. Вот бы быстрый типизированный язык с удобным синтаксисом питона
Артём, привет, почему так моргает свет в начале?
потому что я экспозицию на камере не научился настраивать :/
ничоси 😳 не зря я с# изучал 🤣
кст да, я тоже шарп учил. Почти всё, что там есть под капотом у шарпа, в питоне подключается отдельно)
но нет крутой лямбды, как в шарпе - увы
Ок.
Выглядит как что-то, что делает код крайне трудночитаемым. Конструкция func[T](param: list[T]) -> T - это жесть.
тут дело времени
раньше тоже было тяжело смотреть на такое. Сейчас норма
@@artemshumeiko надо пробовать, но кстати в коде модулей стандартной библиотеки не встречал таких штук почему-то, видимо экзотика
Что за IDE? Это Pycharm?
Да
да, PyCharm Professional
@@artemshumeiko Просто тема приятная и шрифт, иконки ) Пытаюсь настроить так же, но чёт безуспешно (
@@set1qs так у него дефолтная тема и шрифт тоже дефолтный JetBrains Mono
@@set1qs включи новый UI
Только полный гуманитарий будет назначать одной и той же переменной разные типы. Или он не ПРОЕКТИРУЕТ свои программы, прежде чем начнёт их писать?
всмысле? В питоне все так делают, динамическая типизация же)
Кто такие дженерики?
Это в java, net, go, rust.
Есть template в плюсах.
Общий код для разных типов.
Например без дженериков/шаблонов для списков значений int, double нужно будет делать две реализации. С ними - одну.
по простому: если ТипЗначения представить значением, то дженерик это переменная в которых их хранят и описывают функции не конкретными типами, а через эти переменные)
Дженерик это дешевый аналог бадов
Все проще простого воспринимай это как универсальные типы, которые можно изменять по обстоятельству динамически
Порода хомяка
Ого, що це?
это как в реальных проектах использовать
начать можно с небольших полезных функций (utils/helpers), их можно перевести на дженерики. Например, как в видео, функция, которая из последовательности данных извлекает первый ненулевой элемент
Странная практика буквы использовать. Это у вас в компании так принято? Почему [int] не написать?
так в этом суть дженериков. Делать функции с общим типом, без привязки к конкретному типу
В шарпе тоже принято в качестве дженерик-типа писать T или T + , например TKey, TValue
У языка Python нет минусов. Просто не надо язык, который был придуман для обучения новичков/скриптинга/прототипирования использовать для ВСЕГО. Конечно когда начинаешь все больше писать на нем промышленный код, тебе кажется что у него есть недостатки. А потом такие писальщики через пять лет, когда бекенд начинает загибаться, переписывают какую-то часть на производительных языках Go/Rust/C и такие с глазами по пять копеек.... о производительность в десять раз стала круче 😁😁 тучи развинулись, и молния Зевса открыла новый мир)
Сомнительно. Бизнесу нужно быстро, +уже во время разработки у бизнеса часто меняется требования и даже архитектура. В таких случаях "промышленные" языки могут отсохнуть и отвалится. По производительности, в какие сто раз может увеличится производительность, если основное время тратится не на обработку, а на транспорт данных по сети (т.е. фактор одинаковый для всех языков). Да и всегда ли производительность приоритет у бизнеса?
Дык для того и завозят в питон опциональную статическую типизацию, чтобы потоптать поляну более серьезных языков. Ибо доступен как профит динамического языка с его выразительным синтаксисом, так и надежность и удобство поддержки кода, которую дает типизация.
А скорость и потребление железных ресурсов за пределами настоящего хайлоада мало кого волнует. Ибо это в любом случае копейки на фоне стоимости разработки.
@@redneck_prm5429 т.е. типизация делает питон серьезным? а если делает получается у питона вышло совместить динамику и синтаксис с надежностью? и вряд ли кто то умышленно хочет потоптать поляны других языков, скорее собственный путь
@@redneck_prm5429 Все эти Python/Mojo Javascript/TypeScript свою работу делаю на "пол шишечки". Не вижу я в этом хороший архитектурный путь. Всегда там все внедряется на половину, потому что нужно ж сохранять совместимость с динамичным языком. Плюс они портят и размывают границы там где работу могут выполнять например джуниоры и их кусок пишется на скриптовых простых языках, а хардовую часть опытные разработчики пишут отдельно на предназначенном языке. И таким образом джуниор до поры времени не сталкивается с сложным кодом и не лезет туда куда не надо. А так какой смысл языка "для начинающих" если приходишь в компанию, а там на нем все написано и надо уже круто шарить.
"...А скорость и потребление железных ресурсов за пределами настоящего хайлоада мало кого волнует..." во первых плох тот проект, который не стремиться стать хайлоад. Странно писать сайт, которому завтра ты не хочешь популярности. А во-вторых ты просто не знаешь, какой твой проект завтра станет популярным. А вдруг он взлетит резко, потому что интересную программу/сайт написал. Нагрузка прет, а пересесть на другие технологии часто не получиться просто и дешево.
Да Python Javascript дают быстрый взлет, но всегда за быстрым наспех скроенными проектами тянется долгосрочные последствия по поддержанию этого проекта.
@@__.X3.__ Ну во первых есть разные задачи и сайты, не везде транспорт это львиная обработка, особенно так где сайт это онлайн-программы. во-вторых обработка транспорта тоже делается на каких то языках. И почему то в тестах фреймверков, когда меряются количеством фпс, я не сильно видел в лидерах фреймверки на Python. А лидерство берут все те же Go/Rust/C и т.д. Так что не отсохнут и не отвалятся 😄