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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Какой из способов создания списка самый быстрый?
Anonymous Quiz
6%
1
35%
2
33%
3
12%
4
14%
5
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


Генераторное выражение должно делать дополнительную работу по сохранению и
восстановлению своего состояния во время выпуска значений.
Какой метод позволяет узнать количество строк датафрейма?
Anonymous Quiz
34%
df.shape
47%
df.size
4%
df.dtypes
16%
Никакой из вышеперечисленных
Модуль 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
20%
-w
38%
-s
Please open Telegram to view this post
VIEW IN TELEGRAM
'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.