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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Если у функции нет return, что она вернет по умолчанию
Anonymous Quiz
5%
True
4%
NaN
79%
None
12%
Пустую строку
Что выведет код выше?
Anonymous Quiz
4%
m
11%
s
67%
[1]
18%
Error
Немного про области видимости

Имена, определяемые внутри инструкции def, не вступают в конфликт с именами, находящимися за ее пределами, даже если и там и там присутствуют одинаковые имена. Имя X, которому присвоено значение за пределами данной инструкции, полностью отлично от имени X, которому присвоено значение внутри инструкции def.
Какой области видимости не существует?
Anonymous Quiz
27%
Нелокальная
2%
Глобальная
32%
Встроенная
39%
Все существуют
В каком порядке Python сканирует области видимости при поиске той или иной переменной?
Anonymous Quiz
25%
Builtins - Local - Enclosing - Global
37%
Local - Enclosing - Global - Builtins
16%
Enclosing - Local - Global - Builtins
21%
Local - Global - Builtins
Что выведет код?
Anonymous Quiz
64%
25
2%
0
8%
5
26%
Error
Замыкание (closure) представляет функцию, которая запоминает свое лексическое окружение даже в том случае, когда она выполняется вне своей области видимости.

Технически замыкание включает три компонента:
— внешняя функция multiply(), которая определяет некоторую область видимости и в которой определены некоторые переменные и параметры - лексическое окружение
— переменные и параметры (лексическое окружение), которые определены во внешней функции.
— вложенная функция inner(), которая использует переменные и параметры внешней функции.

inner() запоминает окружение, в котором была создана, в частности, значение параметра n. Кроме того, сама принимает параметр и возвращает произведение параметров n и m.
Исполнится ли данный код без ошибки?
Anonymous Quiz
59%
Да
41%
Нет
Обратите внимание на опережающую ссылку в коде:

f2(x)


Вполне нормально вызывать функцию, определенную после функции, где она вызывается, при условии, что второй оператор def выполняется перед фактическим вызовом первой функции. Код внутри def никогда не выполняется до тех пор, пока функция не будет действительно вызвана.
Что выведет код?
Anonymous Quiz
19%
16
28%
4
5%
8
48%
Error
Если выражение lambda и оператор def, определяемый внутри функции, вкладывается в цикл, а вложенная функция ссылается на переменную из объемлющей области видимости, которая изменяется этим циклом, то все функции, генерируемые внутри цикла, будут иметь одно и то же значение — значение ссылаемой переменной на последней итерации цикла.

Лямбда-функция, несмотря на цикл for, будет запоминать последнее значение i, то есть 5:
def makeActions():
acts = []

for i in range(5):
acts.append(lambda x: i ** x) # i в таких условиях всегда равен 4

return acts

Чтобы добиться задуманного, нужно передать текущее значение переменной из объемлющей области видимости посредством стандартного значения:

acts.append(lambda x, i=i: i ** x)
Что выведет код?
Anonymous Quiz
12%
Spam
82%
Ni
4%
SpamNi
1%
Error
Выведется 'Ni', поскольку объявление global заставляет переменную, присваиваемую внутри функции, ссылаться на переменную в объемлющей глобальной области видимости.