Веб-версияОткрыть в Telegram
CCool and Fun Python

Cool and Fun Python

@Python3k · канал · Технологии · в индексе с 2026-07-20
513подписчиков
138постов в индексе
C
Cool and Fun Python
Целую неделю ждал хотя бы 10 реакций 🤯. Не дождался. Этот пост посвящается девятку интересующихся. 🫡 Что же такое ast.literal_eval ? Если просто и коротко, то это функция для превращения строки str в другой питоновский тип данных. Смотрите пример, чтобы всё понять: import ast # Возвращает None result = ast.literal_eval('None') print(result) # None print(type(result)) # <class 'NoneType'> # Возвращает список result = ast.literal_eval('[1, 2, 3]') print(result) # [1, 2, 3] print(type(result)) # <class 'list'> # Возвращает словарь result = ast.literal_eval('{"key": "value"}') print(result) # {'key': 'value'} print(type(result)) # <class 'dict'> Как видно из примера, функция literal_evel сама подбирает нужный тип для конвертации содержимого строки. Круто! ⚠Внимание! literal_eval удобно использовать, даже если вы не уверены в данных. Выполнить rm -rf / функция не сможет. Но будьте готовы отлавливать ошибки, если данные не поддаются преобразованию: result = ast.literal_eval('a = 42') # SyntaxError: invalid syntax result = ast.literal_eval('Hi') # ValueError: malformed node or string on line 1: <ast.Name object at 0x7969dde980> Для самых любопытных, напомню. 🤓 В Python есть модуль pickle. Он умеет мариновать питоновские типы в виде байт-файла. О нём писал тут и тут. А ещё в Python есть модуль json. Он тоже умеет превращать строк в данные и наоборот. Про него я тут не писал. 🙃 #познавательно #lifehack
2 · 479 ·
C
Cool and Fun Python
Фотография
нажмите — покажем
Столько реакций! Класс! Благодарю всех. 🥰 Сегодня день учителя. Надеюсь этот канал учит вас, даёт новые знания. А ваши вопросы в комментариях зачастую учат админа, заставляют освежить знания, изучить что-то новое. Все мы учителя и ученики одновременно. Всех нас с праздником, с днём учителя! 👨‍🏫
422 ·
C
Cool and Fun Python
Держите капельку знаний для работы с временем в Python. Речь пойдёт о timedelta - разнице между двумя точками во времени. Решим простую задачу, сколько секунд прошло между двумя датами. Для простоты возьмём сегодняшнее число и время с интервалом в один час. Вначале у нас всё хорошо. from datetime import datetime dt_gt = datetime(2024, 10, 10, 11, 11) dt_lt = datetime(2024, 10, 10, 10, 11) td = dt_gt - dt_lt print(f'<{dt_gt}> - <{dt_lt}> = <{td}>') print(f'{td.seconds = }') # Результат # <2024-10-10 11:11:00> - <2024-10-10 10:11:00> = <1:00:00> # td.seconds = 3600 Из большего значения (более поздней даты) вычитаем меньшее значение. И получаем ожидаемую разницу в один час - 1:00:00. У timedelta есть удобное свойство, seconds. Оно вернуло 3600 секунд. Познавательная минутка 🤓 В одном часе 60 минут. В одной минуте 60 секунд. Следовательно в одном часе 60 × 60 = 3600 секунд. А ещё в сутках 24 часа или 86400 секунд. Эти знания нам пригодятся после второго примера. А теперь поменяем местами даты. from datetime import datetime dt_gt = datetime(2024, 10, 10, 11, 11) dt_lt = datetime(2024, 10, 10, 10, 11) td = dt_lt - dt_gt print(f'<{dt_lt}> - <{dt_gt}> = <{td}>') print(f'{td.seconds = }') # Результат # <2024-10-10 10:11:00> - <2024-10-10 11:11:00> = <-1 day, 23:00:00> # td.seconds = 82800 Ранее мы убедились, что между датами 1 час или 3600 секунд. Но timedelta сообщает о разнице в 82800 секунд. 😨 Если присмотреться, timedelta теперь минус один день и плюс 23 часа. Считаем -1 день = -24 часа. -24 + 23 = -1 час или -3600 секунд. Получается, что разница во времени посчитана верно. Но ожидаемы -3600 секунд мы не получили. Что делать? 🤔 Смотреть пример 3. from datetime import datetime dt_gt = datetime(2024, 10, 10, 11, 11) dt_lt = datetime(2024, 10, 10, 10, 11) td = dt_lt - dt_gt print(f'<{dt_lt}> - <{dt_gt}> = <{td}>') print(f'{td.total_seconds() = }') # Результат # <2024-10-10 10:11:00> - <2024-10-10 11:11:00> = <-1 day, 23:00:00> # td.total_seconds() = -360
2 · 488 ·
C
Cool and Fun Python
Фотография
нажмите — покажем
print(10 / 2) # 5.0 print(10 // 2) # 5 print(10.0 // 2) # 5.0 print(10 // 2.0) # 5.0 print(10.0 // 2.0) # 5.0 #юмор
469 ·
C
Cool and Fun Python
Эволюция строки кода В одном из проектов надо было разделить две переменных нацело. И в первой версии код выглядел как частное = делимое // делитель: div = divisible // divisor Проект развивался. И понадобился остаток от деления. Он использовался дальше по коду. Выбор пал на вариант 2, как более короткий: # Вариант 1 div = divisible // divisor mod = divisible % divisor # Вариант 2 div, mod = divmod(divisible, divisor) Любой проект не стоит на месте, эволюционирует. Понадобилось округлять остаток от деления в большую сторону. Но функция divmod так вписалась в проект, что решено было использоваться костыль маленькую хитрость с преобразованием типов: div, mod = divmod(divisible, divisor) div += int(bool(mod)) Да и остаток от деления всё так же нужен дальше по коду. 😉 Познавательная минутка 🤓 Если вам нужно округлить вещественное число до целого в большую сторону, Python рекомендует использовать функцию ceil из модуля math стандартной библиотеки: import math div = math.ceil(divisible // divisor) ✍️ - беру на вооружение 🤯 - как это работает? #познавательно #lifehack #python3k #python
573 ·
C
Cool and Fun Python
Хэштеги канала в алфавитном порядке. Закрепил. #алгоритмы #БД #видео #графы #истории #многопоточность #ООП #познавательно #структуры_данных #юмор #bash #crontab #intro #lifehack #PEP8 #python #python3k #SQLAlchemy Python3k Python3kMax
512 ·
C
Cool and Fun Python
Фотография
нажмите — покажем
Маленькая привычка, которая решает большие проблемы Вы когда-нибудь слышали про флаги? 🏴‍☠- это пиратский флаг; 🏁 а это финишный флаг; True и False - пара, создающая логический флаг в программе. Познавательная минутка 🤓 В программировании флаг - это переменная, которая может принимать только два значения: True или False. Главная задача флага - показать, что что-то изменилось и что нужно на это отреагировать. Так что за маленькая привычка из заголовка? Давать переменным-флагам имена, которые начинаются с is_: - пользователь выиграл - is_win - письмо отправлено - is_send_email - идёт обработка большого массива данных и процесс не должен брать новые задачи. Он занят, он is_working_now К таким именам быстро привыкаешь. Скорость написания и отладки кода повышается. А значит появляется время насладиться чашечкой кофе. ✍️ - беру на вооружение 🤯 - как это работает? 👍 - is_thanks #познавательно #lifehack #python3k #python
2 · 597 ·
C
Cool and Fun Python
Фотография
нажмите — покажем
Минутка ностальгии ☕️ Когда-то давным-давно я открыл для себя Python. Первая установка самой свежей на тот момент версии python3.4 была волнительной. Сколько открытий ждало впереди. 👨‍💻 Сегодня случайно обратил внимание, что поддержка 3.4 закончилась в 2019. Представляете, пять лет назад! 😔 Как быстро летит время. Даже боюсь вспоминать Java, который устанавливал на свой первый ПК лет этак 25 назад. 🥺 А какие у вас были языки программирования или версии, которые сейчас устарели? 😉 P.S. Ни слова про BASIC и Fortran. Они навеки в моём сердце. ❤️‍🔥
627 ·
C
Cool and Fun Python
Принимаем решение в словаре Что обычно делают, если надо проверить условие? Конечно же используют конструкцию if. Типичный пример: a = 42 b = 73 if a > b: print("Первое больше") else: print("Первое не больше") Настолько просто, что в комментариях не нуждается. А теперь избавимся от конструкции if else. Для этого перенесём логику принятия решения в словарь: a = 42 b = 73 choice = { True: "Первое больше", False: "Первое не больше", } print(choice[a > b]) Как вам такая версия? Если раньше не пользовался, выглядит непривычно. Но может среди читателей есть те, кто готов поделится своими более крутыми версиями переноса логики в словарь? Пишите в комментариях. ✍️ - беру на вооружение 🤯 - как это работает? 🎄 - с Новым годом и Рождеством #познавательно #lifehack #python3k #python
1 · 661 ·
C
Cool and Fun Python
Использование символа подчёркивания _ в циклах for: паттерны и антипаттерны Обратил внимание, что новички, которые только познакомились с переменной _, начинают использовать её где нужно и где не нужно. Рассмотрим два варианта применения символа _ в контексте цикла for. Хорошо: Использование _ только для управления циклом Символ подчёркивания _ применяется в качестве имени переменной-итератора, если её значение не требуется явно использовать внутри тела цикла. Это позволяет подчеркнуть, что данная переменная несёт исключительно служебную функцию и не должна участвовать в дальнейшей обработке данных. Например: data = [1, 2, 3] for _ in range(len(data)): print("Повторение без использования значения") Здесь переменная _ используется только для того, чтобы выполнить определённое количество итераций, но она нигде более не упоминается в теле цикла. Этот подход является общепринятым и считается хорошим стилем программирования, поскольку он ясно показывает намерение разработчика и минимизирует риск случайного изменения или повторного использования переменной. Познавательная минутка 🤓 Символ _ широко признан в сообществе Python как обозначение "переменной-пустышки". Плохо: Использование _ внутри цикла Если же символ _ используется не только для управления циклом, но также задействуется в теле цикла для каких-либо операций, это может привести к путанице и ошибкам. Рассмотрим следующий пример: data = [10, 20, 30] total = 0 for _ in data: total += _ print(total) Этот плохой код, потому что переменная _ здесь используется и в теле цикла. Такой подход нарушает соглашение об использовании _ . Правильно было бы использовать i или даже item вместо _. Использование символа подчёркивания _ в циклах for может быть полезным инструментом. Правильное использование улучшает ясность и эффективность кода, тогда как злоупотребление может привести к трудностям в отладке и поддержке программного обеспечения. ✍️ - беру на вооружение 🤯 - как это работает? 👍 - for _ in data: #
1 · 663 ·
C
Cool and Fun Python
Всех с днём юмора Пришло время рассказать о пасхалке в Python, которая привязана к 1 апреля. Да, вы не ослышались. Запускается только когда системное время у вас на 1 апреля. Познавательная минутка 🤓 Системное время - дата и время на вашем компьютере, ноутбуке, телефоне, сервере. Современные устройства с доступом в интернет умеют корректировать своё системное время. Телефоны делают это через связь с сотовой вышкой. В таких устройствах сначала надо выключить синхронизацию. Потом устройство позволит задать любую дату и время. Хватит томить. К делу: from Monty import Python При запуске этого кода вас ждёт... А нет, не расскажу. Сами запускайте и радуйтесь. Всех с праздником. Улыбок вам. 😁 ✍️ - беру на вооружение 🤯 - как это работает? 👍 - с праздником #юмор #пасхалка #python3k #python
5 · 822 ·
C
Cool and Fun Python
Видео
162.7 МБ · нажмите — покажем
Любовь, смерть и роботы 0:08:27 #видео
1 · 759 ·
C
Cool and Fun Python
Опрос
нажмите — покажем
715 ·
C
Cool and Fun Python
Видео
7.2 МБ · нажмите — покажем
Всем отличной удалёнки. Или офиса с ништяками. 😉😂
6 · 837 ·
C
Cool and Fun Python
Всех с праздником! Ура! 🎉 И держите праздничный фокус. my_dict = { 1: 'целое', 1.0: 'вещественное', True: 'логическое', } print(my_dict) Что же лежит внутри словаря, что же выведем на печать? 🤔 Познавательная минутка 🤓 Для хранения пар ключ-значение в словаре Python использует технологию хеширования ключа. Так можно быстро найти значение. Скорость O(1), т.е. быстрее некуда. Итак, вычисляем хеш от 1 и помещаем первое значение в пустой словарь. Далее вычисляем хеш для 1.0. Если такого хеша нет, создаём новую пару ключ-значение. А если есть, заменяем значение у существующего ключа. И наконец вычисляем хеш для True. Если такого хеша нет, создаём новую пару ключ-значение. А если есть, заменяем значение у существующего ключа. {1: 'логическое'} Разрыв шаблона для новичка. И вполне обычная ситуация для более опытного питониста. 😉 Пусть эта особенность Python будем самым страшным событием в эти праздник и выходные. ✍️ - беру на вооружение 🤯 - как это работает? 🍾 - с праздником #пасхалка #познавательно #python3k #python
824 ·
C
Cool and Fun Python
Ссылка
нажмите — покажем
Меня по телеку Телеграм каналу показывают. https://t.me/zen_of_python/4401 А о чём хотелось бы почитать вам на моём канале?
707 ·
C
Cool and Fun Python
Забавный факт Вполне ожидаемо, что defaultdict возвращает значение по умолчанию, если ключ отсутствует в словаре. Но только при поиске через квадратные скобки: defaultd = defaultdict(default_func) default_value = defaultd[key] А что будет, если воспользоваться методом get ? В этом случае получаем поведение классического словаря dict. Т.е. при обращении к несуществующему ключу вернётся None. defaultd = defaultdict(default_func) default_value = defaultd.get(key) default_value is None ✍️ - беру на вооружение 🤯 - как это работает? 👍 - None is None #python #python3k Python3k
733 ·
C
Cool and Fun Python
Фотография
нажмите — покажем
Всем, кто отмечает 100000000 день в году, с праздником. С круглым числом. ❤️‍🔥 - обожаю этот день ⚡️ - электрон мне в SSD 👨‍💻 - а у меня проект #python #python3k Python3k
668 ·
C
Cool and Fun Python
Опрос
нажмите — покажем
382 ·
C
Cool and Fun Python
Альтернатива if-elif-else / match-case из далёкого прошлого Этот приём я узнал лет пять назад. Ага! Пять. На календарь посмотри, star-пёр. 2026 на дворе. Ты этот приём узнал лет 15-20 назад. 🤓 Итак, есть большой, просто огромный if. if data == "one": # много строк кода ... elif data == "two": # ещё больше строк кода ... elif data = "three" # кода меньше не становится ... else: # тут не очень много кода, строк 15-20 ... Что делать, когда один if-elif-else занимает сотни строк кода? 🤔 Самый простой и логичный вариант - перенести логику в функции. def func_one(): # много строк кода, но в отдельной функции ... def func_two(): # ещё больше строк кода, но в функции не так страшно ... def func_three(): # кода меньше не становится, но визуально он разбит на более мелки блоки ... def func_else(): # тут не очень много кода ... if data == "one": func_one() elif data == "two": func_two() elif data == "three" func_three() else: func_else() Как видите, код поделился на отдельные блоки-функции, а полотно if-elif-else стало компактным. Эй! Хватит полотен. Переходи к своему секретному приёму. 🤓 Итак, секрет в словаре. Ключ - значение, с которым сравниваем data. Значение - функция-обработчик. И конечно же функцию в словарь передаём, а не вызываем. def func_one(): ... def func_two(): ... def func_three(): ... def func_else(): ... funcs = { "one": func_one, "two": func_two, "three": func_three, } func = funcs.get(data, func_else) func() Теперь мы совершенно избавились от if-elif-else. Вместо него словарь funcs со всеми вариантами ветлвелния. Вместо вызова у нас метод .get(data). В него же помещаем ветку else. Кстати, две последние строки можно записать в одну, вот так: funcs.get(data, func_else)() ✍️ - беру на вооружение 🤯 - как это работает? 🎄- неужели праздники всё? #python3k #lifehack Python3k
1 · 383 ·
C
Cool and Fun Python
В продолжение идеи про словарь функций Начало тут def handle_negative(): print("Обработка отрицательных значений") ... def handle_zero(): print("Обработка нуля") ... def handle_positive_less_than_ten(): print("Обработка положительных чисел меньше десяти") ... def handle_greater_or_equal_to_ten(): print("Обработка чисел больше или равных десяти") ... condition_func_map = { lambda x: x < 0: handle_negative, lambda x: x == 0: handle_zero, lambda x: 0 < x < 10: handle_positive_less_than_ten, lambda x: x >= 10: handle_greater_or_equal_to_ten } def process_data(data): for condition, handler in condition_func_map.items(): if condition(data): return handler() Так можно не просто сравнивать data с фиксированными значениями. Теперь это if-elif-else внутри ключей словаря. Познавательная минутка 🤓 lambda функция в Python является анонимной. Это значит, что перед lambda не ставят знак равно. my_func = lambda x: x ** 2 Такой код считается плохим тоном в Python ☝️ В словаре функций lambda становится ключём словаря, но без присваивания переменной. Она (lambda) остаётся анонимной, Гвидо доволен, коллеги делятся печеньками. ✍️ - беру на вооружение 🤯 - как это работает? 👨‍💻 - дедлайн, айтишник торжествует #python3k #lifehack Python3k
2 · 487 ·
C
Cool and Fun Python
Redis хорош, но... Ничего не имею против хранения данный в ОЗУ при помощи Redis. Быстрый доступ, копия на диске, очереди и прочие плюшки. Но что же вы иногда творите, коллеги? 😱 Если программе нужен набор ключ-значение и этот набор не выходит за пределы вашего однопроцессного однопоточного приложения, используйте словарь. Всем спасибо, я высказался и восстанавливаюсь от постигшего меня шока. ✍️ - беру на вооружение 🤯 - как это работает? 👨‍💻 - мы не ищем лёгкий путей #python3k #lifehack Python3k Python3kMax
486 ·
C
Cool and Fun Python
Кто-нибудь пользовался новой удалённой отладкой в Python 3.14? Поделитесь своим опытом в комментария. 👨‍💻- пользовался pdb 🤷‍♂️ - что за зверь?
425 ·
C
Cool and Fun Python
Про ОС Оказывается мысли о том, что у программиста должен быть MacBook, а код надо писать под Linux, живы в умах юных (не по возрасту, в по опыту) айтишников до сих пор. Представляете, человек верит что нельзя программировать под Виндой, потому что код будет работать на сервере с Пингвином. При этом он же хочет взять кредит на Мак, потому что иначе ты не программист. Познавательная минутка 🤓 Python код работает одинаково на любой операционной системе. У каждой ОС есть свой интерпретатор Python. И он преобразует один и тот же код в понятные для своей ОС команды. Минутка занудства 🤓 На самом деле есть некоторые низкоуровневые Python библиотеки и модули, которые используют разное написание Python кода для разных ОС. Но новичку там нечего делать. А опытный разработчик достаточно опытен, чтобы понять разницу. А какие ОС используете вы? Пишите в комментариях. 🤓 - Windows 🤩 - MacOS 😎 - Linux 👨‍💻 - Другая ОС #python3k Python3k Python3kMax
2 · 449 ·
C
Cool and Fun Python
Магические числа Нравится волшебство? А вот и зря. Магические числа - антипаттерн в программировании. Вместо того, чтобы делать срез до -38, надо явно сказать что это за число. STANDART_SUFFIX = -38 text = "Очень много текста. Прям очень. И он весь нужен для кода. Стандартное завершение любого текста." useful_data = text[0:STANDART_SUFFIX] Тут должен начаться спор. Может быть хранить в константе положительное число, а в срезе указывать константу с минусом? Но мы не будем ругаться. Мы пойдём дальше. И сразу код: without_suffix_slice = slice(0, -38) text = "Очень много текста. Прям очень. И он весь нужен для кода. Стандартное завершение любого текста." useful_data = text[without_suffix_slice] Что тут произошло? Одна из стандартных функций slice многими забыта и не используется от слова совсем. С помощью неё создали срез-заготовку. И он поможет нам избежать магических чисел и добавить понятности в то, что именно мы вырезаем из текста. ✍️ - беру на вооружение 🤯 - как это работает? 👨‍💻 - вся моя магия внутри ИИ #python3k #lifehack Python3k Python3kMax
1 · 481 ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем