Python: задачки и вопросы
Open in Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Show more6 865
Subscribers
-324 hours
-167 days
-4630 days
Posts Archive
Ваш Python-код пугает коллег?
Код с нечитаемыми переменными, бесконечными if-else, костыли в асинхронности… Всё работает, но почему-то страшно. Вы точно хотите поддерживать этот хаос?
На открытом вебинаре «Страх и ненависть в кодовой базе» 26 февраля в 20:00 (мск) будут разбираться такие темы:
— самые ужасные ошибки Python-разработчиков;
— как написать код, который не стыдно показать коллегам;
— лучшие практики и антипаттерны промышленной разработки.
Всем участникам — скидка на большое обучение «Python Developer. Professional».
Регистрация открыта: https://otus.pw/bdBY/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576. ERID: 2W5zFGEzdyi
Что выведет код выше? Полные варианты ответа на картинке
Операторы
return (и yield) в функциях Python необязательны. Когда функция не возвращает значение явно, то она завершает работу, когда управление выходит за конец тела функции. Формально все функции возвращают какое-то значение; если не снабдить функцию оператором return, тогда она автоматически будет возвращать объект None:
Функции подобного рода, не содержащие return, представляют собой эквивалент Python того, что в ряде языков называется «процедурами». Они обычно вызываются как операторы, а результаты None игнорируются, т.к. работа делается без вычисления полезного результата.
Об этом стоит знать, потому что Python не будет сообщать о том, что вы пытаетесь потребить результат функции, в которой отсутствуют операторы return.В данной задаче важно помнить, что Python — интерпретируемый язык, то есть код читается и исполняется построчно.
— Переменной
X присваивается значение 99;
— В функции selector() есть ключевое слово global: X ссылается на глобальную переменную;
— В selector() выполняется команда print(X), которая сразу же обращается к глобальной переменной X, и на данный момент её значение — 99. Поэтому на этом шаге будет выведено 99.
— Затем X присваивается новое значение 88, но это произойдёт после того, как было выведено значение.X = 99
def selector(): # Имя X используется, но не присваивается
print(X) # Имя X найдено в глобальной области видимости
selector()—
'spam' * 3 генерирует строку 'spamspamspam', которая состоит из трех повторений строки 'spam';
— используется генератор списка [], который обходит каждый символ строки 'spamspamspam';
— Функция f(x) просто возвращает переданное ей значение x без изменений.Из всех флагов только -s действительный:
-s S, --setup=S statement to be executed once initially (default pass)Для указания кода настройки в режиме командной строки применяется строка после флага
—s (или несколько в случае многострочного кода настройки), а в режиме вызовов API-интерфейса — аргумент setup. В итоге тесты можно ориентировать более четко, например, выносить инициализацию списка выносится в код, чтобы измерять
время только итерации:
python3 -m timeit -n 1000 -r 3 -s "L = [1,2,3,4,5]" "M = [x + 1 for x in L]"
Подробнее в документацииМодуль timeit позволяет измерить время исполнения кода.
В команде
python3 -m timeit -n 1000 -r 3 "L = [1,2,3,4,5]" "M = [x + 1 for x in L]" используются несколько флагов, которые управляют поведением модуля:
-n 1000: флаг указывает количество повторений. Тестируемый код будет выполняться 1000 раз за каждую итерацию.
-r 3: флаг задает количество повторных запусков всего теста
Вывод у команды будет такой (проверено на Python 3.13.1):
1000 loops, best of 3: 111 nsec per loop