Держите капельку знаний для работы с временем в Python. Речь пойдёт о
Решим простую задачу, сколько секунд прошло между двумя датами. Для простоты возьмём сегодняшнее число и время с интервалом в один час.
Вначале у нас всё хорошо.
Из большего значения (более поздней даты) вычитаем меньшее значение. И получаем ожидаемую разницу в один час -
У timedelta есть удобное свойство, seconds. Оно вернуло 3600 секунд.
Познавательная минутка🤓
В одном часе 60 минут.
В одной минуте 60 секунд.
Следовательно в одном часе 60 × 60 = 3600 секунд.
А ещё в сутках 24 часа или 86400 секунд. Эти знания нам пригодятся после второго примера.
А теперь поменяем местами даты.
Ранее мы убедились, что между датами 1 час или 3600 секунд. Но timedelta сообщает о разнице в 82800 секунд.😨
Если присмотреться, timedelta теперь минус один день и плюс 23 часа.
Считаем -1 день = -24 часа.
-24 + 23 = -1 час или -3600 секунд.
Получается, что разница во времени посчитана верно. Но ожидаемы -3600 секунд мы не получили.
Что делать?🤔 Смотреть пример 3.
У объекта timedelta есть метод total_second. Он и вернул ожидаемые -3600 секунд. 🥳
Познавательная минутка🤓
Доступ к свойству объекта осуществляется через точку.
Доступ к методу объекта осуществляется путём вызова метода, через имя и круглые скобки.
Всем отличного времени, какая бы разница у него не была.⏳
✍️ - беру на вооружение
🤯 - как это работает?
#познавательно #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 секунд мы не получили.
Что делать?
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() = -3600.0
У объекта timedelta есть метод total_second. Он и вернул ожидаемые -3600 секунд. 🥳
Познавательная минутка
Доступ к свойству объекта осуществляется через точку.
объект.свойствоДоступ к методу объекта осуществляется путём вызова метода, через имя и круглые скобки.
объект.метод()Всем отличного времени, какая бы разница у него не была.
✍️ - беру на вооружение
🤯 - как это работает?
#познавательно #python
Please open Telegram to view this post
VIEW IN TELEGRAM
✍11👍4🤯1
Эволюция строки кода
В одном из проектов надо было разделить две переменных нацело. И в первой версии код выглядел как
Проект развивался. И понадобился остаток от деления. Он использовался дальше по коду. Выбор пал на вариант 2, как более короткий:
Любой проект не стоит на месте, эволюционирует. Понадобилось округлять остаток от деления в большую сторону. Но функция divmod так вписалась в проект, что решено было использоватьсякостыль маленькую хитрость с преобразованием типов:
Да и остаток от деления всё так же нужен дальше по коду.😉
Познавательная минутка🤓
Если вам нужно округлить вещественное число до целого в большую сторону, Python рекомендует использовать функцию ceil из модуля math стандартной библиотеки:
✍️ - беру на вооружение
🤯 - как это работает?
#познавательно #lifehack #python3k #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
Please open Telegram to view this post
VIEW IN TELEGRAM
5✍9🤯6👍5
Хэштеги канала в алфавитном порядке. Закрепил.
#алгоритмы
#БД
#видео
#графы
#истории
#многопоточность
#ООП
#познавательно
#структуры_данных
#юмор
#bash
#crontab
#intro
#lifehack
#PEP8
#python
#python3k
#SQLAlchemy
#алгоритмы
#БД
#видео
#графы
#истории
#многопоточность
#ООП
#познавательно
#структуры_данных
#юмор
#bash
#crontab
#intro
#lifehack
#PEP8
#python
#python3k
#SQLAlchemy
👍4🔥1
Маленькая привычка, которая решает большие проблемы
Вы когда-нибудь слышали про флаги?
🏴☠- это пиратский флаг;
🏁 а это финишный флаг;
Познавательная минутка🤓
В программировании флаг - это переменная, которая может принимать только два значения: True или False.
Главная задача флага - показать, что что-то изменилось и что нужно на это отреагировать.
Так что за маленькая привычка из заголовка? Давать переменным-флагам имена, которые начинаются с
- пользователь выиграл -
- письмо отправлено -
- идёт обработка большого массива данных и процесс не должен брать новые задачи. Он занят, он
К таким именам быстро привыкаешь. Скорость написания и отладки кода повышается. А значит появляется время насладиться чашечкой кофе.
✍️ - беру на вооружение
🤯 - как это работает?
👍 - is_thanks
#познавательно #lifehack #python3k #python
Вы когда-нибудь слышали про флаги?
🏴☠- это пиратский флаг;
🏁 а это финишный флаг;
True и False - пара, создающая логический флаг в программе.Познавательная минутка
В программировании флаг - это переменная, которая может принимать только два значения: True или False.
Главная задача флага - показать, что что-то изменилось и что нужно на это отреагировать.
Так что за маленькая привычка из заголовка? Давать переменным-флагам имена, которые начинаются с
is_:- пользователь выиграл -
is_win- письмо отправлено -
is_send_email- идёт обработка большого массива данных и процесс не должен брать новые задачи. Он занят, он
is_working_nowК таким именам быстро привыкаешь. Скорость написания и отладки кода повышается. А значит появляется время насладиться чашечкой кофе.
✍️ - беру на вооружение
🤯 - как это работает?
👍 - is_thanks
#познавательно #lifehack #python3k #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18✍9🤯2
Принимаем решение в словаре
Что обычно делают, если надо проверить условие? Конечно же используют конструкцию if.
Типичный пример:
Настолько просто, что в комментариях не нуждается.
А теперь избавимся от конструкции if else. Для этого перенесём логику принятия решения в словарь:
Как вам такая версия? Если раньше не пользовался, выглядит непривычно. Но может среди читателей есть те, кто готов поделится своими более крутыми версиями переноса логики в словарь? Пишите в комментариях.
✍️ - беру на вооружение
🤯 - как это работает?
🎄 - с Новым годом и Рождеством
#познавательно #lifehack #python3k #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
2✍16🎄8🤯7🔥2🤬1🏆1
Использование символа подчёркивания
Обратил внимание, что новички, которые только познакомились с переменной
Хорошо: Использование
Символ подчёркивания
Здесь переменная
Познавательная минутка🤓
Символ
Плохо: Использование
Если же символ
Этот плохой код, потому что переменная
Использование символа подчёркивания
✍️ - беру на вооружение
🤯 - как это работает?
👍 -
#познавательно #lifehack #python3k #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:#познавательно #lifehack #python3k #python
Please open Telegram to view this post
VIEW IN TELEGRAM
1✍12👍6❤1🤯1🤣1🏆1
Всех с днём юмора
Пришло время рассказать о пасхалке в Python, которая привязана к 1 апреля. Да, вы не ослышались. Запускается только когда системное время у вас на 1 апреля.
Познавательная минутка🤓
Системное время - дата и время на вашем компьютере, ноутбуке, телефоне, сервере.
Современные устройства с доступом в интернет умеют корректировать своё системное время. Телефоны делают это через связь с сотовой вышкой.
В таких устройствах сначала надо выключить синхронизацию. Потом устройство позволит задать любую дату и время.
Хватит томить. К делу:
При запуске этого кода вас ждёт... А нет, не расскажу. Сами запускайте и радуйтесь.
Всех с праздником. Улыбок вам. 😁
✍️ - беру на вооружение
🤯 - как это работает?
👍 - с праздником
#юмор #пасхалка #python3k #python
Пришло время рассказать о пасхалке в Python, которая привязана к 1 апреля. Да, вы не ослышались. Запускается только когда системное время у вас на 1 апреля.
Познавательная минутка
Системное время - дата и время на вашем компьютере, ноутбуке, телефоне, сервере.
Современные устройства с доступом в интернет умеют корректировать своё системное время. Телефоны делают это через связь с сотовой вышкой.
В таких устройствах сначала надо выключить синхронизацию. Потом устройство позволит задать любую дату и время.
Хватит томить. К делу:
from Monty import Python
При запуске этого кода вас ждёт... А нет, не расскажу. Сами запускайте и радуйтесь.
Всех с праздником. Улыбок вам. 😁
✍️ - беру на вооружение
🤯 - как это работает?
👍 - с праздником
#юмор #пасхалка #python3k #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤯3✍2😁1
Всех с праздником! Ура! 🎉
И держите праздничный фокус.
Что же лежит внутри словаря, что же выведем на печать?🤔
Познавательная минутка🤓
Для хранения пар ключ-значение в словаре Python использует технологию хеширования ключа. Так можно быстро найти значение. Скорость O(1), т.е. быстрее некуда.
Итак, вычисляем хеш от 1 и помещаем первое значение в пустой словарь.
Далее вычисляем хеш для 1.0. Если такого хеша нет, создаём новую пару ключ-значение. А если есть, заменяем значение у существующего ключа.
И наконец вычисляем хеш для True. Если такого хеша нет, создаём новую пару ключ-значение. А если есть, заменяем значение у существующего ключа.
Разрыв шаблона для новичка. И вполне обычная ситуация для более опытного питониста.😉
Пусть эта особенность Python будем самым страшным событием в эти праздник и выходные.
✍️ - беру на вооружение
🤯 - как это работает?
🍾 - с праздником
#пасхалка #познавательно #python3k #python
И держите праздничный фокус.
my_dict = {
1: 'целое',
1.0: 'вещественное',
True: 'логическое',
}
print(my_dict)Что же лежит внутри словаря, что же выведем на печать?
Познавательная минутка
Для хранения пар ключ-значение в словаре Python использует технологию хеширования ключа. Так можно быстро найти значение. Скорость O(1), т.е. быстрее некуда.
Итак, вычисляем хеш от 1 и помещаем первое значение в пустой словарь.
Далее вычисляем хеш для 1.0. Если такого хеша нет, создаём новую пару ключ-значение. А если есть, заменяем значение у существующего ключа.
И наконец вычисляем хеш для True. Если такого хеша нет, создаём новую пару ключ-значение. А если есть, заменяем значение у существующего ключа.
{1: 'логическое'}Разрыв шаблона для новичка. И вполне обычная ситуация для более опытного питониста.
Пусть эта особенность Python будем самым страшным событием в эти праздник и выходные.
#пасхалка #познавательно #python3k #python
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯7🍾6✍4🕊1
Забавный факт
Вполне ожидаемо, что defaultdict возвращает значение по умолчанию, если ключ отсутствует в словаре. Но только при поиске через квадратные скобки:
А что будет, если воспользоваться методом
В этом случае получаем поведение классического словаря dict. Т.е. при обращении к несуществующему ключу вернётся None.
✍️ - беру на вооружение
🤯 - как это работает?
👍 - None is None
#python #python3k
Python3k
Вполне ожидаемо, что 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
✍4🤯2👍1