Python Community
13.1K subscribers
1.24K photos
26 videos
15 files
713 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
⚡️Создаём файловые пути

Функционал os.path кому-то может показаться недостаточным и, чтобы не изобретать велосипед, стоит взглянуть на pathlib, добавленный с версии python 3.4.

Самый важный класс — Path. Он создаёт путь и выбирает подкласс (PosixPath, WindowsPath) на основе запущенной ОС. Подробнее можно почитать тут.

Работать с ним можно с помощью оператора "/", который добавляет второй аргумент в путь.

Ещё одной особенностью класса является совместимость с os, поскольку это PathLike объект.

P.S.
Если вы используете модуль glob, то можете его не импортировать, функционал хранится в функции pathlib.glob.

#миниурок #pathlib
⚡️ Что такое __name__

Заглянув в большинство скриптов вы можете увидеть строку по типу __name__ == "__main__". Многие новички не понимают, зачем её добавлять, если и так всё работает.

Представим, что вы написали небольшой скрипт, который выводит hello world при запуске. А другой программист захотел импортировать ваш модуль, поскольку там была функция print_hello().

Но вместе с импортом он получил ненужную hello world в терминал. Почему так случилось? Потому что python-код также выполняется во время импорта. Чтобы этого избежать, используют __name__.

При импорте __name__ получает название модуля, а при прямом запуске (python3 script.py) его значение будет __main__. Подробнее вы, как обычно, можете почитать тут.

#теория
⚡️ Что такое __all__ ?

Продолжаем говорить про импорт модулей. В этот раз разберём, что такое переменная __all__ и как её использовать.

Думаю, в нескольких ваших скриптах встречается строка по типу from package import *, которая импортирует всё из модуля. Но ведь функций/классов может быть намного больше, чем вы думаете.

Чтобы не нагружать вашу программу ненужными объектами разработчики вписывают в __all__ имена доступных типов.

Всё элементарно, но чтобы почитать об этом подробнее, можете заглянуть на сайт документации.

#теория
⚡️ Задачка с собеседования | #Medium

Условие:

Вам необходимо "перевернуть" число задом наперёд. На вход идут только целые числа, а знак сохраняется. Вам необходимо придумать самый быстрый вариант

Примеры:

reverse(123) -> 321
reverse(-123) -> -321
reverse(1237568) -> 8657321
reverse(9000000) -> 9

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Ответ на предыдущую задачу
⚡️ Добавляем время в программу

Модуль time позволяет замерять время выполнения кода, может заморозить программу, а также позволяет узнать текущее время.

Первую задачу выполняет функция time(), которая возвращает время в секундах. Для заморозки приложения используют команду sleep(seconds).

А вот выводом времени занимается метод strftime(), который выводит структуру, полученную, например, из gmtime() в определённом формате.

Подробнее почитать о модуле можно на сайте документации.

#миниурок #time
Что выведет этот код?
Anonymous Quiz
11%
0
10%
6
19%
30
5%
46
40%
Ошибку
15%
Узнать ответ
⚡️ Что такое __pycache__

На этот раз, это не переменная, а папка, внутри которой хранятся файлы .pyc и .pyo. Зачем она нужна можно почитать в PEP 3147, а здесь будет краткое объяснение.

Каждый раз, когда вы запускаете программу, Python, переводит её в байткод и сохраняет в папку __pycache__. Это сделано в целях оптимизации и, чтобы, модули быстрее импортировались.

Файлы с расширением .pyc и .pyo — это байткод и оптимизированный байткод. Они создаются заново, если код программы изменился.

#теория
⚡️ Задачка с собеседования | #Medium

Условие:

Вам необходимо проверить, являются ли две строки анаграммами? На вход идут две строки, состоящие из символов английского алфавита.

Примеры:

is_anagram('car', 'tar') -> False
is_anagram('car', 'cart') -> False
is_anagram('anagram', 'nagaram') -> True
is_anagram('beluga', 'begula') -> True

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Ответ на предыдущую задачу
⚡️ Математические операции

Если простых математических операций сложения и деления вам недостаточно, то взгляните в сторону модуля math. Там хранится множество мат. функций, которые могут вам пригодиться.

ceil(x), floor(x) — округляет число x в большую/меньшую сторону.

fsum(iterable) — суммирует все значения в iterable, исключая неточность чисел с плавающей точкой. Лучше это посмотреть на примере выше.

isclose(a, b) — поскольку числа с плавающей точкой имеют неточность, правильнее будет их сравнивать используя этот метод.

Также там есть множество логарифмических и тригонометрических функций, которые вы можете найти, почитав документацию.

#миниурок #math
Что выведет код выше?
Anonymous Quiz
7%
6
16%
5
16%
3
14%
2
46%
Узнать ответ
⚡️ Работаем с логами

Для этого в Python существует удобный модуль logging, позволяющий управлять логами в пару строк.

logging.getLogger(name=None) — возвращает экземпляр логера на основе имени. Может быть полезна при разработке модулей.

logging.basicConfig(**kwargs) — позволяет задать настройки модулю, например, имя файла (filename), формат записи (format), уровень важности (level).

debug(), info(), warning(), error(), critical() — позволяют записывать информацию в логер на определённом уровне важности.

О том, какие уровни важности использовать, вы можете почитать в HOWTO, а подробнее о функционале модуля — в документации.

#миниурок #logging
⚡️ Задачка с собеседования | #Hard

Условие:

Вам необходимо проверить, в правильном ли порядке расставлены {}, (), [], <>. Вместе с ними может идти и другой текст, поэтому вам стоит заняться фильтрацией строки.

Примеры:

valid_bracket("(some_data)")
valid_bracket("() [ww]1{}<>")
valid_bracket("< [ ( { })]>")
valid_bracket("(]")
valid_bracket("([9)]")

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования