Python: задачки и вопросы
前往频道在 Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
显示更多7 125
订阅者
无数据24 小时
+67 天
无数据30 天
帖子存档
В данной задаче важно помнить, что 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Какой метод позволяет узнать количество строк датафрейма?
map() — самый быстрый вариант, поскольку функция фактически работает на C. И это превышает скорости конкурентов. А кто в рейтинге взял серебро и бронзу?
Как видно, в каждой функции по 10 миллионов шагов функций — каждая строит список из 10 000 элементов 1000 раз.
Запустив сценарий в Python 3.7, мы получаем следующие результаты — map() быстрее списковых включений, они оба быстрее циклов for, а генераторные выражения и функции находятся посередине (время в секундах):
forLoop :: 2.34160
listComp : 1.31783
mapCall :: 0.41968
genExpr :: 1.92063
genFunc :: 1.93672
Генераторное выражение должно делать дополнительную работу по сохранению и
восстановлению своего состояния во время выпуска значений.Модуль time позволяет замерить время исполнения кода. Вот пример функции с ее использованием:
import time
def timer(func, *args): # Упрощенная функция измерения времени
start = time.clock()
for i in range(1000):
func(*args)
return time.clock() - start # Суммарное истекшее время в секундах
Что делают остальные модули, можно посмотреть в полном списке в документации Python.
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
