Python: задачки и вопросы
7.82K subscribers
1.18K photos
1 video
1 file
81 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Download Telegram
Модуль 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
Какой флаг модуля timeit существует?
Anonymous Quiz
21%
-a
21%
-q
19%
-w
39%
-s
Из всех флагов только -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]"


Подробнее в документации
'spam' * 3 генерирует строку 'spamspamspam', которая состоит из трех повторений строки 'spam';
— используется генератор списка [], который обходит каждый символ строки 'spamspamspam';
— Функция f(x) просто возвращает переданное ей значение x без изменений.
Что выведет код?
Anonymous Quiz
13%
Ничего
62%
99
5%
X
20%
Error
X = 99

def selector(): # Имя X используется, но не присваивается
print(X) # Имя X найдено в глобальной области видимости

selector()
В данной задаче важно помнить, что Python — интерпретируемый язык, то есть код читается и исполняется построчно.

— Переменной X присваивается значение 99;
— В функции selector() есть ключевое слово global: X ссылается на глобальную переменную;
— В selector() выполняется команда print(X), которая сразу же обращается к глобальной переменной X, и на данный момент её значение — 99. Поэтому на этом шаге будет выведено 99.
— Затем X присваивается новое значение 88, но это произойдёт после того, как было выведено значение.
Что выведет код выше? (Полные варианты на картинке)
Anonymous Quiz
13%
1
61%
2
13%
3
12%
Error
Операторы returnyield) в функциях Python необязательны. Когда функция не возвращает значение явно, то она завершает работу, когда управление выходит за конец тела функции. Формально все функции возвращают какое-то значение; если не снабдить функцию оператором return, тогда она автоматически будет возвращать объект None:

Функции подобного рода, не содержащие return, представляют собой эквивалент Python того, что в ряде языков называется «процедурами». Они обычно вызываются как операторы, а результаты None игнорируются, т.к. работа делается без вычисления полезного результата.

Об этом стоит знать, потому что Python не будет сообщать о том, что вы пытаетесь потребить результат функции, в которой отсутствуют операторы return.
Что выведет код выше? Полные варианты ответа на картинке
Anonymous Quiz
22%
1
17%
2
50%
3
11%
Error
pandas.Series.between возвращает логическое значение Series, эквивалентное left <= series <= right. При обработке Series возвращает эквивалентную серию, состояющую из True / False.

Документация

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


df_filtered = df["col"].between(1983, 1986)