+ Вот реализация на JS например, позволяет python в вебе использовать. Или реализация на Rust, в которой насколько я знаю, python код получится скомпилировать
Добрый день! Спасибо за видео. Парочка вопросов: * Обязан ли pyi файл называться также, как тот файл, который мы описываем? * Как описывать чужую библиотеку, если я не могу класть свои .pyi файлы внутрь библиотеки с таким же названием?
В TypeScript например тайп хинтинги не ограничиваются файлом, ide парсит хинтинг файлы, и сопоставляет хинтинги с обычным js, по имени функции или класса.
пришел на этот видос с видоса про типизированный пайтон и когда увидел реализацию стаб файлов, точнее как именно они работают и мягко говоря охренел)) какое то время понадобится, чтоб принять новую реальность :D
1:10 мне нравится идея Uncle Bob-a использовать автоматические тесты чтобы показать как нужно взаимодействовать с функциями и какого типа данные они принимают.
Привет! Клевый канал, смотрю тебя периодически. Больше с точки зрения именно python, чем веб. У тебя есть видео про декораторы? Смысл, как их делать, а главное зачем. Никак не могу найти им применение в реальной жизни. В смысле, понятно, где их можно юзать разработчику библиотек, а разработчику обычных программ есть смысл?
Спасибо за хорошее видео. Тайпхинтинг -- хорошая штука, но есть один нюанс. Для функции `custom_sum` мы указали, что входные аргументы имеют тип `int`, и функция возвращает `int`. Но работать она будет и с `float`. А потом оказывается, что прожуёт она и `decimal.Decimal`. Ну окей, у нас есть `typing.Union` -- в чём проблема перечислить? То же касается возвращаемого результата. А потом вдруг оказывается, что допустимы и типы `numpy.*` -- их предусмотреть уже нетривиальная задача. Не менее смешно, что функция прожуёт и sqlalchemy.Column -- и как такое предусмотреть? Итого по тайпхинтам у меня вопросов больше, чем ответов.
Hint - подсказка, они вообще не строгие, если не накручивать сверху жестких проверок через mypy или еще что-то. Языки со статической типизацией сложны не собственно тем, что надо явно указывать тип для каждой переменной, там куча других сложностей, реально замедляющих разработку
Как раз на крайнем Python Conf++ рассказывали про использование stubs для "обтипизации" Django силами monkeytype и волонтерами - хороший пример как и для чего можно применять сабж.
1.Разрабатываем ЯП, в котором не нужно прописывать тип переменной, радуемся тому, как круто теперь можно в любое время переменной присвоить значение любого типа и не задавать его при создании переменной. 2. Начинаем писать большие по объему сложные программные системы, начинаем терять контроль над типами, куда, что передавать, и что возвращает функция. При создании программы ide и при компиляции среда исполнения не могут нам помочь, но далее при исполнении начинает вылетать с ошибкой несоответствия типа. 3. Начинаем придумывать костыли, чтобы ПО могло проверить типы, и не надо было это делать вручную.
надеюсь, вы не выносите описания типов из .py файлов в .pyi файлы - .pyi же только для конкретных задач, в основном типы указываются в самом .py исходнике
Если видео о pyi-файлах вообще, то хотелось бы ещё услышать в нем, что можно засунуть в тело функции кроме "...". У меня вот после просмотра остался открытый вопрос, который придется идти гуглить.
@@t0digital В том-то и вопрос. Зачем вообще оставили необходимость писать многоточие, если тело функции в этих файлах ничего не значит? Это лишние символы и место, которое ассоциируется с неким функционалом, которого на деле нет.
Знаю, умею, практикую! Только я называю это аннотациями, а не тайпхинд... тайпхент... Виму, конечно, плевать, но мне удобнее. За видос лайк, читаемость всегда в приоритете!
Всем привет Не у кого не возникала проблема, что при переходе на реализацию (хочешь перейти на описание функции ctrl+клик мыши) переходит на эти pyi файлы?
Колокольчик поставил давно. Вот как ж...й чувствовал, когда на канал подписывался, что начну писать на пайтон... И вот случилось! На работе, пишу утилиты для системы тестирования...
Там где нет issues, там просто нет пользователей. Ну и специфика такая, пайтон динамической типизации язык, непросто там сделать хорошую проверку. Проверяторов много, там не только mypy
@@oleksandershevchenko8063 да, для меня это слишком, потому что слова too much не имеют отношения к ИТ и это было бы неуместно. Словосочетание type hinting имеет явное прямое отношение к ИТ (то есть к теме видео) и в документации, книгах, статьях (все они на англ) пишется type hinting, поэтому это а) полезно знать б) нет ничего плохого в том, чтобы не переводить это. Когда я слышу «тайп хинтинг» я сразу понимаю, о чем речь. Если бы я услышал «подсказки типов», мне пришлось бы на мгновение задуматься о том, что говорящий имеет в виду. Ну а бенефит это давно заимствованное слово и едва ли кто-то не понимает его значения из смотрящих это видео.
Вопрос возник. Что если при полиморфном использовании функции в наследниках изменить типы входящих данных - как это отразиться на стаб файлах? Надеюсь понятно изьяснился.
Мне как новичку в использовании аннотаций не совсем понятно вот что: Допустим у меня есть requests библиотека. То что мне надо сделать? Самому написать pyi файлы к ней и если да, то где потом лучше всего расположить так, чтоб никого из будущих читателей кода не удивлять?
Как правило на библиотеки не пишут pyi файлы - в хороших либах уже есть прописанные типы внутри. В requests почему-то нет. Ну нет и нет, надо прописывать типы самому в своём коде. У любой переменной можно взять type(var), понять, какого она типа и прописать соответствующий тип в своём коде
@@t0digital спасибо за ответ, ещё я нашёл вариант с TYPE_CHECKING модуля typing и __futute__.annotations чтобы можно было не указывать кавычки. Может кому пригодится
самое смешное, что благодаря этим *.pyi файлам, когда в пайчарме хочешь перейти к дефинишену функции, он тебя редиректит не на реальный дефинишн, а на функцию с тайпхинтингом. Как это перенастроить - хз! бесит, дико
Белый фон жёстко бьёт по глазам, когда смотришь в темноте особенно. Старый был лучше намного.
Да, больше так не будем
Это в хромакей забыл текстуру
Белый фон. Вот, что значит "попал в рай без очереди"
Хромакей для расистов
На аве у тебя главная героиня в аниме: Девушка на час?
@@engsara1610 да
Алексей: % рассказывает про pyi файлы в python %
Зрители: Стаканчик! Я_вижу_стаканчик! Как отвести взгляд от стаканчика? 🍵😨
никак, это нативная интеграция :)
а что с ней не так то?
- Видишь стаканчик ? И я вижу. А его нет.
Рисковый номер! Впервые на арене Алексей в приветствии не называет всех зрителей котами-котонами!
Хотелось бы услышать от тебя об различных реализациях Пайтона, думаю многим будет интересно :)
+
Вот реализация на JS например, позволяет python в вебе использовать. Или реализация на Rust, в которой насколько я знаю, python код получится скомпилировать
Не все пользуются колокольчиками, и я один из них.
Но я не пропускаю видео, т.к. подписок, еще и часто публикующих - не так много)
Комментарий от python разработчика из Сибири.
Видео хорошие, keep it up!
Можете снять видос как вы просто делаете какой-то проект на django если не сложно. Я буду очень рад:)
Пушка! Продолжай радовать нас полезной инфой)
Максимально полезная инфа ! :)
Добрый день! Спасибо за видео. Парочка вопросов:
* Обязан ли pyi файл называться также, как тот файл, который мы описываем?
* Как описывать чужую библиотеку, если я не могу класть свои .pyi файлы внутрь библиотеки с таким же названием?
теоретически, мы можем импортировать необходимые методы из библиотеки в такой utils-модуль и для него уже создать *.pyi файл.
В TypeScript например тайп хинтинги не ограничиваются файлом, ide парсит хинтинг файлы, и сопоставляет хинтинги с обычным js, по имени функции или класса.
Супер! Спасибо! Ждём новую рубрику)
До до крутые
пришел на этот видос с видоса про типизированный пайтон и когда увидел реализацию стаб файлов, точнее как именно они работают и мягко говоря охренел))
какое то время понадобится, чтоб принять новую реальность :D
Круто, как всегда. Ждём новую рубрику и побольше бы таких фишечек. Спасибо за полезный видос.
Агонь! Вообще агонь!
Спасибо за видео!
Всё доходчиво!!! Подача материала супер. Успехов и 1 000 000 пользователей.
Спасибо!
Диджитализируй! - познавательный. Спасибо, теперь знаю что это и зачем.
Большое спасибо за видео
А на сегодня всё, до новых встреч
Отлично, так потихоньку, смотря прикольные видео, и питону параллельно можно научиться. Круто, спасибо!
1:10 мне нравится идея Uncle Bob-a использовать автоматические тесты чтобы показать как нужно взаимодействовать с функциями и какого типа данные они принимают.
Спасибо, хорошая инфа. Алексей, что там с курсами?
скоро-скоро
Алексей, у вас был такой прекрасный и уютный фон! Подумайте, возможно стоит откатиться!
Точно стоит, этот не зашёл:)
Было полезно как всегда, спасибо!
прикольно не знал, спасибо
Спасибо!
Спасибо за выпуск! Полезная инфа! Я до этого пользовался :type: в docstring. Тоже норм работает если в проекте не используется тайпинг
Спасибо за практическое видео! Очень интересно и полезно оказалось!
Новая рубрика огонь!
Спасибо большое за полезные видео!
Больше подобных полезных штук!
Очень полезное видео! Продолжайте в том же духе)))
Спасибо за выпуск, лайк!
О как. Круто. Спасибо. Пригодится.
Белый фон убивает если смотреть вечером, осенью, в не самой освещенной комнате )
Спасибо. Было интересно и понятно.
Почаще ролики выпускай
О, мастер джедай использует технику Vim в pycharme :)
Добрый день!, ваши видео дали мне шанс заработать с удовольствием. Спасибо большое )
Оч круто! Спасибо)
Как поставить 100 оайков?) И снова спасибо тебе, как всегда, самые лучшие практики и советы. Выкатывай новую рубрику в продакшен!)
Удобная фишка в использовании python)
Это по типу заголовочных файлов в СИ что ли?
Спасибо за выпуск
у меня колокольчик на взводе, не грусти
О, отлично :)
Привет! Клевый канал, смотрю тебя периодически. Больше с точки зрения именно python, чем веб.
У тебя есть видео про декораторы? Смысл, как их делать, а главное зачем.
Никак не могу найти им применение в реальной жизни.
В смысле, понятно, где их можно юзать разработчику библиотек, а разработчику обычных программ есть смысл?
Часто бывает необходимо скомпилировать и/или собрать пакет , например rpm кода на python , расскажи , пож-та , про лучшие способы это сделать )
Оставь, пожалуйста, старый фон, белый тяжёлый для глаз
А так, ты как всегда топ
Да, тут с фоном неудачно
@@t0digital спасибо большое за твое творчество!
Спасибо за видео! Может не к месту, но чёт додо пиццу захотелось, вообще не пойму почему
Спасибо за хорошее видео. Тайпхинтинг -- хорошая штука, но есть один нюанс. Для функции `custom_sum` мы указали, что входные аргументы имеют тип `int`, и функция возвращает `int`. Но работать она будет и с `float`. А потом оказывается, что прожуёт она и `decimal.Decimal`. Ну окей, у нас есть `typing.Union` -- в чём проблема перечислить? То же касается возвращаемого результата. А потом вдруг оказывается, что допустимы и типы `numpy.*` -- их предусмотреть уже нетривиальная задача. Не менее смешно, что функция прожуёт и sqlalchemy.Column -- и как такое предусмотреть?
Итого по тайпхинтам у меня вопросов больше, чем ответов.
Ну, если так углубляться, то можно послать всё нахрен и прописать
if type(a) != 'int' or type(b) != 'int':
raise ValueError('Разраб еблан')
Первый раз вижу, как Алексей пишет не в виме
Ибо на это есть причина.
Ага, прям удивилися.
Неужели решил наконец-то на ide перейти)
у него плагин стоит ideavim, так что по сути он пишет в виме
Значит не все видео смотрели) Ролик с Pycharm уже был (бизнес логика в джанго)
Хорошая штука, но хинтинги все-таки в питоне не особо строгие, лучше уж сразу же тогда использовать языки со статической типизацией))
Hint - подсказка, они вообще не строгие, если не накручивать сверху жестких проверок через mypy или еще что-то. Языки со статической типизацией сложны не собственно тем, что надо явно указывать тип для каждой переменной, там куча других сложностей, реально замедляющих разработку
Лайк за фон
2020 - очередной раз объясняем людям преимущества статической типизации :)
Это не статическая типизация а тайп хинтинг, что является разными вещами
Кайф. Не по РЕР-кам ли будет рубрика?) их кажется столько, что каждый можно в отдельном видео разгонять... ждем-с.
Идея хорошая, но ближайшая задумка не по PEP'ам!
Крутяк)
Привет, котаны!
Как раз на крайнем Python Conf++ рассказывали про использование stubs для "обтипизации" Django силами monkeytype и волонтерами - хороший пример как и для чего можно применять сабж.
Дааа!
th-cam.com/video/apoial8krAw/w-d-xo.html - забыл ссылку добавить
Огонь
А можно как-то автоматом генерировать заполнение pyi?
можно
Когда же Ваш курс ?
скоро-скоро
1.Разрабатываем ЯП, в котором не нужно прописывать тип переменной, радуемся тому, как круто теперь можно в любое время переменной присвоить значение любого типа и не задавать его при создании переменной.
2. Начинаем писать большие по объему сложные программные системы, начинаем терять контроль над типами, куда, что передавать, и что возвращает функция. При создании программы ide и при компиляции среда исполнения не могут нам помочь, но далее при исполнении начинает вылетать с ошибкой несоответствия типа.
3. Начинаем придумывать костыли, чтобы ПО могло проверить типы, и не надо было это делать вручную.
Спасибо. Еще один вопрос закрыт.
а как сделать stub file для сторонней установленной библиотеки, которая написана без type хинтингов?
🏃🏃🏃
надеюсь, вы не выносите описания типов из .py файлов в .pyi файлы - .pyi же только для конкретных задач, в основном типы указываются в самом .py исходнике
вообще-то в расматриваемой функции и float и int можно использовать например. Это как-то можно захинтить чтоб оба варианта принимались?
На ентерпрайсе за юзаю, даже не верится что так просто и удобно.
stub file - файл заглушка. Хм... как звучит. Предлагаю ввести понятие crutch file - файл костыль, более распространённое явление.
Если видео о pyi-файлах вообще, то хотелось бы ещё услышать в нем, что можно засунуть в тело функции кроме "...". У меня вот после просмотра остался открытый вопрос, который придется идти гуглить.
Зачем засовывать что-то в тело функции кроме многоточия? Определение функции в .py файле, в .pyi только подсказки типов
@@t0digital В том-то и вопрос. Зачем вообще оставили необходимость писать многоточие, если тело функции в этих файлах ничего не значит? Это лишние символы и место, которое ассоциируется с неким функционалом, которого на деле нет.
@@Laertid а что по-вашему должно быть на месте функции в таком случае?
@@t0digital чисто заголовок.
Хотя возможно это я так говорю потому, что с "..." не сталкивался, только с pass.
Агонь!!!
Знаю, умею, практикую! Только я называю это аннотациями, а не тайпхинд... тайпхент...
Виму, конечно, плевать, но мне удобнее.
За видос лайк, читаемость всегда в приоритете!
Всем привет
Не у кого не возникала проблема, что при переходе на реализацию (хочешь перейти на описание функции ctrl+клик мыши) переходит на эти pyi файлы?
Похоже ты превращается в отца русского Python, так держать
Спасибо:)
Как быть если функции с одним и тем же именем? И где ищутся соответствующие функции, внутри той же директории?
Познавательно)
Мне пайтон наравится все больше и больше :-) спасибо
01:59 Задумался и таки сказад неправильно. Всё-таки в обеих ситуациях ИЛИ в обОих случаях. С уважением
потому что:
мужской род - оба
женский род - обе
Да-да
С какой версией Python 3 доступны pyi ?
А расскажи как возвращать dict с описанием типов {"a": 1, "b": "test", "c": {"hello": "word"}} ?
Я бы это возвращал не диктом, а через dataclass, например. Задав тип каждого атрибута в нём
Годнота! Как раз сегодня с товарищем обсуждал то что Дижитализируй пропал и новых видосиков нету xDD
Как идут дела с разработкой курса? Анкету заполнили достаточно людей?
Да. Курс в разработке
Мы не ищем лёгких путей! :)
Колокольчик поставил давно. Вот как ж...й чувствовал, когда на канал подписывался, что начну писать на пайтон... И вот случилось! На работе, пишу утилиты для системы тестирования...
@Диджитализируй!
А можешь пояснить,а почему такое кол-во Issues в репозитории Mypy ? Может и не стоит доверять ему? ;)
Там где нет issues, там просто нет пользователей. Ну и специфика такая, пайтон динамической типизации язык, непросто там сделать хорошую проверку. Проверяторов много, там не только mypy
Тема интересная, но есть вопрос. Когда мы импортируем сторонние библиотеки, они же помещаются в ExternalLibraries. Как быть в таком случае?
Спасибо за видео!
P.S. А где ламповый фон?(
вернётся;)
А почему нельзя в основном файле написать def custom_sum(a : int, b : int): return a + b + 123?
Можно, если ваш код не подразумевает поддержку питон 2 и если это не код внешней библиотеки, обновления которой ломать не стоит
Тайп хинтинги рулят. Бенефитов много... Кроме клин кодинга стоит подумать о клин спикинге... :-))))
Кому надо понять - поймут. Если человек не понимает слов тайп хинтинг, у меня для него оч плохие новости
@@t0digital Так лучше: " Если человек не понимает слов тайп хинтинг, у меня для него вери бед новости" Или для вас это слишком ту мач? :-)
@@oleksandershevchenko8063 да, для меня это слишком, потому что слова too much не имеют отношения к ИТ и это было бы неуместно. Словосочетание type hinting имеет явное прямое отношение к ИТ (то есть к теме видео) и в документации, книгах, статьях (все они на англ) пишется type hinting, поэтому это а) полезно знать б) нет ничего плохого в том, чтобы не переводить это. Когда я слышу «тайп хинтинг» я сразу понимаю, о чем речь. Если бы я услышал «подсказки типов», мне пришлось бы на мгновение задуматься о том, что говорящий имеет в виду. Ну а бенефит это давно заимствованное слово и едва ли кто-то не понимает его значения из смотрящих это видео.
@@t0digital Проехали.
@@oleksandershevchenko8063 вжууух!
Вопрос возник. Что если при полиморфном использовании функции в наследниках изменить типы входящих данных - как это отразиться на стаб файлах? Надеюсь понятно изьяснился.
Интересный видос. Без стаканчика было бы хуже
А где же "здоров котаны©" ?
Зачем в Python .pyi файлы и чем они полезны?
За тем же, зачем в TypeScript нужны файлы *.d.ts.
Занавес, музыка из "Ералаша" (парам-пара-пам)
directed by robert b weide
Интеграция с ДоДо
Мне как новичку в использовании аннотаций не совсем понятно вот что:
Допустим у меня есть requests библиотека. То что мне надо сделать? Самому написать pyi файлы к ней и если да, то где потом лучше всего расположить так, чтоб никого из будущих читателей кода не удивлять?
Как правило на библиотеки не пишут pyi файлы - в хороших либах уже есть прописанные типы внутри. В requests почему-то нет. Ну нет и нет, надо прописывать типы самому в своём коде. У любой переменной можно взять type(var), понять, какого она типа и прописать соответствующий тип в своём коде
Почему я не могу отвести глаза от стаканчика:)
Всем привет, подскажите пж, как бороться с циклическими import при указании тайп хинтингов?
можно указывать подсказку типов как строку. Вместо:
user: User
можно так:
user: "User"
@@t0digital спасибо за ответ, ещё я нашёл вариант с TYPE_CHECKING модуля typing и __futute__.annotations чтобы можно было не указывать кавычки. Может кому пригодится
самое смешное, что благодаря этим *.pyi файлам, когда в пайчарме хочешь перейти к дефинишену функции, он тебя редиректит не на реальный дефинишн, а на функцию с тайпхинтингом. Как это перенастроить - хз! бесит, дико
Алексей, MacBook поменял?
Нет, тот же, 15" 2015го года
Некий аналог заголовочного файла (.h) в языке Си
.pyi в питоне - альтернатива .h в С
Я правильно понимаю?)
Нет, координатно разные вещи