Форматированные строки в Питоне (f-строки, f-strings)
Данный функционал появился в версии 3.6, и позволяет визуально улучшить оформление текстовых строк, тем самым увеличив читабельность кода.
Как было раньше:
На первый взгляд, все просто и понятно. Но с двумя аргументами запись уже выглядит громоздко:
Кроме того, реальные проблемы могут начаться, когда у вас выражение чуть сложнее. Например:
Выражение, опять-таки, выглядит громоздко и читается с трудом. Но вот что случится, если через пару месяцев мы решим хранить коды ошибок в строках:
Забыв поменять тип представления переменной с %d на %s мы получили следующую ошибку:
Еще один коварный момент кроется в том, что мы можем перепутать местами аргументы. Допустим, мы выводим логгирование ошибки с датой и временем, и случайно поменяли ошиблись в порядке аргументов:
Тут я “ошибся”, перепутав местами порядок следования дня, месяца и года. В итоге получаем вывод:
Что, естественно, является ошибкой.
Теперь рассмотрим, как эти же примеры выглядят с f-строками.
Обратите внимание! В начале строки мы добавляем префикс ‘f’, что указывает интерпретатору, что далее следует форматированная f-строка.
Стало чуть нагляднее. Но давайте взглянем на отличие в записях на нашем примере с длинной строкой с выводом ошибки в лог:
Тут мы видим, какая переменная встанет в соответствующее место. Более того, нам теперь необязательно указывать тип переменной, как было раньше.
Крайне рекомендую к использованию!
Ссылка на статью в Яндекс.Дзен https://dzen.ru/a/ZI0kYs3DwBvM3OZ0
#python #junior #string
Данный функционал появился в версии 3.6, и позволяет визуально улучшить оформление текстовых строк, тем самым увеличив читабельность кода.
Как было раньше:
name = 'Федя'
print('Привет, %s' % name)
На первый взгляд, все просто и понятно. Но с двумя аргументами запись уже выглядит громоздко:
print('Дата: %02d:%02d' % (day, month))
Кроме того, реальные проблемы могут начаться, когда у вас выражение чуть сложнее. Например:
module_name = 'database'
line_number = 103
error_string = 'отсутствует соединение с базой данных'
error_code = 2883
print('Ошибка в модуле %s, строка %d: %s (код ошибки %d)' % (module_name, line_number, error_string, error_code))
Выражение, опять-таки, выглядит громоздко и читается с трудом. Но вот что случится, если через пару месяцев мы решим хранить коды ошибок в строках:
module_name = 'database'
line_number = 103
error_string = 'отсутствует соединение с базой данных'
error_code = 'F-2883' # поменяли формат ошибок (был integer, стал строковый)
print('Ошибка в модуле %s, строка %d: %s (код ошибки %d)' % (module_name, line_number, error_string, error_code))
Забыв поменять тип представления переменной с %d на %s мы получили следующую ошибку:
TypeError: %d format: a number is required, not str
Еще один коварный момент кроется в том, что мы можем перепутать местами аргументы. Допустим, мы выводим логгирование ошибки с датой и временем, и случайно поменяли ошиблись в порядке аргументов:
import datetime
now = datetime.datetime.now()
module_name = 'database'
line_number = 103
error_string = 'отсутствует соединение с базой данных'
error_code = 2883
print('%04d-%02d-%02d %02d:%02d:%02d Ошибка в модуле %s, строка %d: %s (код ошибки %d)' %
(now.day, now.month, now.year, now.hour, now.minute, now.second, module_name, line_number, error_string, error_code))
Тут я “ошибся”, перепутав местами порядок следования дня, месяца и года. В итоге получаем вывод:
0017-06-2023 09:51:54 Ошибка в модуле database, строка 103: отсутствует соединение с базой данных (код ошибки 2883)
Что, естественно, является ошибкой.
Теперь рассмотрим, как эти же примеры выглядят с f-строками.
name = 'Федя'
# было
print('Привет, %s' % name)
# стало
print(f'Привет, {name}')
Обратите внимание! В начале строки мы добавляем префикс ‘f’, что указывает интерпретатору, что далее следует форматированная f-строка.
day = 1
month = 2
# было
print('Дата: %02d:%02d'% (day, month))
# стало
print(f'Дата:{day:02}:{month:02}')
Стало чуть нагляднее. Но давайте взглянем на отличие в записях на нашем примере с длинной строкой с выводом ошибки в лог:
import datetime
now = datetime.datetime.now()
module_name = 'database'
line_number = 103
error_string = 'отсутствует соединение с базой данных'
error_code = 2883
# было
print('%04d-%02d-%02d %02d:%02d:%02d Ошибка в модуле %s, строка %d: %s (код ошибки %d)' %
(now.day, now.month, now.year, now.hour, now.minute, now.second, module_name, line_number, error_string, error_code))
# стало
print(f'{now.year:04}-{now.month:02}-{now.day:02} {now.hour:02}:{now.minute:02}:{now.second:02} Ошибка в модуле {module_name}, строка {line_number}: {error_string} (код ошибки {error_code})')
Тут мы видим, какая переменная встанет в соответствующее место. Более того, нам теперь необязательно указывать тип переменной, как было раньше.
Крайне рекомендую к использованию!
Ссылка на статью в Яндекс.Дзен https://dzen.ru/a/ZI0kYs3DwBvM3OZ0
#python #junior #string
Получаем информацию о системе + версию Питона
В Питоне есть несколько стандартных пакетов, которые позволяют получить информацию об операционной системе и версии Питона. Мы будем использовать platform для получения информации о системе и sys для получения версии Питона (потому что она дым выдается отдельными числами для минорной, мажорной и патч версий, тогда как в пакете platform функция python_version() возвращает строку.
Основные используемые функции:
⁃ sys.version_info
⁃ platform.system()
Плюс, несколько специфичных для каждой ОСи:
⁃ platform.freedesktop_os_release() для Linux
⁃ platform.mac_ver() для MacOS
⁃ platform.win32_ver() и platform.win32_edition() для Windows
Обратите внимание на проверку версий Питона: некоторые функции стали доступны только начиная с определенных версий. Эта информация есть в документации – https://docs.python.org/3/library/platform.html
Данный скрипт доступен для скачивания в GitHub ➡️ https://gist.github.com/DiPaolo/7aa921fdf45e16e7fb359c44825babb7
Статья также доступна на моем канале в Дзен ➡️ https://dzen.ru/a/ZJKMPwzAOEeSJgtG. Подписывайтесь! 🛎️
#python #junior #system_info #python_info
В Питоне есть несколько стандартных пакетов, которые позволяют получить информацию об операционной системе и версии Питона. Мы будем использовать platform для получения информации о системе и sys для получения версии Питона (потому что она дым выдается отдельными числами для минорной, мажорной и патч версий, тогда как в пакете platform функция python_version() возвращает строку.
Основные используемые функции:
⁃ sys.version_info
⁃ platform.system()
Плюс, несколько специфичных для каждой ОСи:
⁃ platform.freedesktop_os_release() для Linux
⁃ platform.mac_ver() для MacOS
⁃ platform.win32_ver() и platform.win32_edition() для Windows
Обратите внимание на проверку версий Питона: некоторые функции стали доступны только начиная с определенных версий. Эта информация есть в документации – https://docs.python.org/3/library/platform.html
Данный скрипт доступен для скачивания в GitHub ➡️ https://gist.github.com/DiPaolo/7aa921fdf45e16e7fb359c44825babb7
Статья также доступна на моем канале в Дзен ➡️ https://dzen.ru/a/ZJKMPwzAOEeSJgtG. Подписывайтесь! 🛎️
#python #junior #system_info #python_info
This media is not supported in your browser
VIEW IN TELEGRAM
Объясняю про коллбэки на пальцах ☎️📲
Коллбэк (callback) – это обычная функция, но которая должна быть вызвана при каком-то событии. Для этого мы передаем наш коллбэк в некоторую функцию. Эта функция потом просто вызовет нашу функцию-коллбэк, которую мы ей передали.
Аналогия: мы звоним в клинику, а там нам отвечают, что все операторы заняты, и предлагают оставить свой номер, чтобы они перезвонили. Это и есть пример коллбэка (с английского, кстати, так дословно и переводится – перезвонить обратно или обратный вызов).
То есть мы оставили номер, на который нужно перезвонить, когда освободится оператор.
Также и в программировании: мы передаем функцию, которую нужно вызвать при наступлении некоторого события или при выполнении каких-то условий.
Пример
Мы написали функцию (1), которая имитирует работу таймера.
При срабатывании таймера мы хотим узнать об этом и как-то среагировать. Для этого в функцию таймера передается коллбэк, то есть функция, которую нужно вызвать (3) по истечении заданного времени.
Также написали два коллбэка: (4) и (5).
В главной функции (6) запускаем два таймера, в которые передаем первый и второй наши коллбэки.
При срабатывании таймеров вызываются коллбэки: через 3 секунды первый, а потом через 5 секунд и второй. Таким образом мы узнаем, что время истекло, и можем сделать какие-то действия в нашей программе. В данном случае мы просто выводим текстовые сообщения.
Вывод работы скрипта:
#python #junior #callbacks
Коллбэк (callback) – это обычная функция, но которая должна быть вызвана при каком-то событии. Для этого мы передаем наш коллбэк в некоторую функцию. Эта функция потом просто вызовет нашу функцию-коллбэк, которую мы ей передали.
Аналогия: мы звоним в клинику, а там нам отвечают, что все операторы заняты, и предлагают оставить свой номер, чтобы они перезвонили. Это и есть пример коллбэка (с английского, кстати, так дословно и переводится – перезвонить обратно или обратный вызов).
То есть мы оставили номер, на который нужно перезвонить, когда освободится оператор.
Также и в программировании: мы передаем функцию, которую нужно вызвать при наступлении некоторого события или при выполнении каких-то условий.
Пример
Мы написали функцию (1), которая имитирует работу таймера.
При срабатывании таймера мы хотим узнать об этом и как-то среагировать. Для этого в функцию таймера передается коллбэк, то есть функция, которую нужно вызвать (3) по истечении заданного времени.
Также написали два коллбэка: (4) и (5).
В главной функции (6) запускаем два таймера, в которые передаем первый и второй наши коллбэки.
При срабатывании таймеров вызываются коллбэки: через 3 секунды первый, а потом через 5 секунд и второй. Таким образом мы узнаем, что время истекло, и можем сделать какие-то действия в нашей программе. В данном случае мы просто выводим текстовые сообщения.
Вывод работы скрипта:
-- start timer
-- timer end
Alarm
-- start timer
-- timer end
ALARM !!!
#python #junior #callbacks
Раскрашивание текста в print()
Вывод в терминал / консоль / командную строку можно оформлять цветом. Для этого используются специальные последовательности символов.
Эта же функциональность доступна и в Питоне.
Вот эти последовательности спец. символов.
Для выделений текста цветом:
Чтобы покрасить фон текста:
Например:
Также есть спец. последовательности символов для выделения жирным, а также подчеркивать текст.
Кроме того, важная последовательность для сброса ранее установленного значения:
#python #junior #text #formatting
Вывод в терминал / консоль / командную строку можно оформлять цветом. Для этого используются специальные последовательности символов.
Эта же функциональность доступна и в Питоне.
Вот эти последовательности спец. символов.
Для выделений текста цветом:
\033[0;30m - черный
\033[0;31m - красный
\033[0;32m - зеленый
\033[0;33m - желтый
\033[0;34m - синий
\033[0;35m - фиолетовый
\033[0;36m - бирюзовый
\033[0;37m - белый
Чтобы покрасить фон текста:
\033[40m - черный
\033[41m - красный
\033[42m - зеленый
\033[43m - желтый
\033[44m - синий
\033[45m - фиолетовый
\033[46m - бирюзовый
\033[47m - белый
Например:
print('\033[41m красный \033[0m')
print('\033[42m зеленый \033[0m')
print('\033[44m синий \033[0m')
Также есть спец. последовательности символов для выделения жирным, а также подчеркивать текст.
Кроме того, важная последовательность для сброса ранее установленного значения:
\033[0m
#python #junior #text #formatting
Свой веб-сервер за минуту
Знали ли вы, что в стандартной поставке Питона есть модуль, который позволяет поднять веб-сервер за считанные секунды прямо “из коробки”?
Модуль называется
1. заходим в папку, к файлам которой мы хотим предоставить доступ по веб-интерфейсу
2. набираем в консоли:
3. готово!
Теперь мы можем вбить в браузере адрес http://localhost:8000 и удостовериться, что все работает – мы увидим список файлов в нашей папке, плюс, сможем их скачать. А если в вашей папке есть файл index.html, то отобразится веб-страница, описанная в этом файле.
#python #web_server #junior #middle
Знали ли вы, что в стандартной поставке Питона есть модуль, который позволяет поднять веб-сервер за считанные секунды прямо “из коробки”?
Модуль называется
http.serverи вот как им пользоваться:
1. заходим в папку, к файлам которой мы хотим предоставить доступ по веб-интерфейсу
2. набираем в консоли:
python -m http.server
3. готово!
Теперь мы можем вбить в браузере адрес http://localhost:8000 и удостовериться, что все работает – мы увидим список файлов в нашей папке, плюс, сможем их скачать. А если в вашей папке есть файл index.html, то отобразится веб-страница, описанная в этом файле.
#python #web_server #junior #middle
Формат времени и даты
Сегодня расскажу вам о стандарте представления времени и дат, который часто используется в разработке.
Стандарт этот именуется ISO 8601. Почему важно знать о нем? Потому что он часто используется при разработке ПО: хранение логов, передача дат в JSON, хранение даты и времени в базе данных и так далее.
В нем описан не только стандартизированный (то есть единый) формат записи даты и времени как таковой, но и учтен формат записи часового пояса. А это крайне важная вещь при разработке ПО, которое потенциально может работать либо распределенно, либо на компьютерах по всему миру.
Стандарт поддерживается большинством языков в рамках их стандартных библиотек, что позволяет легко прочитать либо сохранить дату/время в унифицированном формате.
Вот как выглядит, например, формат полной записи времени, даты и часового пояса:
Например,
В ISO 8601 описаны также и другие форматы хранения даты и времени, однако, описанный выше формат является самым полным.
#junior #middle #iso #datetime
Сегодня расскажу вам о стандарте представления времени и дат, который часто используется в разработке.
Стандарт этот именуется ISO 8601. Почему важно знать о нем? Потому что он часто используется при разработке ПО: хранение логов, передача дат в JSON, хранение даты и времени в базе данных и так далее.
В нем описан не только стандартизированный (то есть единый) формат записи даты и времени как таковой, но и учтен формат записи часового пояса. А это крайне важная вещь при разработке ПО, которое потенциально может работать либо распределенно, либо на компьютерах по всему миру.
Стандарт поддерживается большинством языков в рамках их стандартных библиотек, что позволяет легко прочитать либо сохранить дату/время в унифицированном формате.
Вот как выглядит, например, формат полной записи времени, даты и часового пояса:
YYYY-MM-DDThh:mm:ssTZD
Например,
2023-07-09T14:58:02+04:00
, что означает 9 июля 2023 г. 14 часов 58 минут и 2 секунды по московскому времени. Символ T
служит разделителем даты и времени. В конце также может стоять символ Z
, который будет означать время по UTC (например, та же дата+время может быть записана как 2023-07-09T10:58:02Z
)В ISO 8601 описаны также и другие форматы хранения даты и времени, однако, описанный выше формат является самым полным.
#junior #middle #iso #datetime
👍2👎1🤔1