fa
Feedback
Python: задачки и вопросы

Python: задачки и вопросы

رفتن به کانال در Telegram

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

نمایش بیشتر
6 952
مشترکین
-424 ساعت
-107 روز
-6130 روز
آرشیو پست ها
Выводится 'Spam', поскольку оператор nonlocal означает, что присваивание X внутри вложенной функции изменяет X в локальной области видимости объемлющей функции. Без этого оператора присваивания классифицировало X бы как локальную переменную во вложенной функции, делая ее другой переменной; тогда код выводил бы 'Ni'.

Что выведет код?
Anonymous voting

#размяться
#размяться

Выводится 'Ni' в одной строке, затем 'Spam' в другой, потому что print() во вложенной функции находит имя в локальной области видимости объемлющей функции, а отображение в конце находит переменную в глобальной области видимости.

Что выведет код?
Anonymous voting

#размяться
#размяться

Выведется 'Ni', поскольку объявление global заставляет переменную, присваиваемую внутри функции, ссылаться на переменную в объемлющей глобальной области видимости.

Что выведет код?
Anonymous voting

#размяться
#размяться

Если выражение 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 voting

#ловушка
#ловушка

Обратите внимание на опережающую ссылку в коде:
f2(x)
Вполне нормально вызывать функцию, определенную после функции, где она вызывается, при условии, что второй оператор def выполняется перед фактическим вызовом первой функции. Код внутри def никогда не выполняется до тех пор, пока функция не будет действительно вызвана.

Исполнится ли данный код без ошибки?
Anonymous voting

#джуну
#джуну

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

Что выведет код?
Anonymous voting

#джуну
#джуну

В каком порядке Python сканирует области видимости при поиске той или иной переменной?
Anonymous voting

Что делает встроенная область видимости в Python?
Anonymous voting