Что из нижеперечисленного верно про функции?
Anonymous Quiz
30%
Принимают параметры
3%
Могут отличаться при каждом выполнении кода
2%
Группируют наборы операторов
65%
Все вышеперечисленное
Какие утверждения про *args от *kwargs верны?
Anonymous Quiz
8%
*args создает словарь именованных аргументов функции
12%
*kwargs создает список позиционных аргументов функции
5%
Количество астерисков * неважно, главное — слова args / kwargs
74%
Нет ни одного верного утверждения
В Python ради гибкости вызовам функций можно передавать аргументы по имени с помощью синтаксиса
Пример позиционных аргументов:
Пример именованных аргументов:
имя=значение
и распаковывать произвольно много аргументов для отправки посредством снабжения аргументов звездочками — *args
(позиционные аргументы) и **kwargs
ключевые аргументы — Keyword arguments.Пример позиционных аргументов:
def print_numbers(*args):
for number in args:
print(number)
# Вызов функции с произвольным количеством аргументов
print_numbers(1, 2, 3, 4, 5)
Пример именованных аргументов:
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
# Вызов функции с произвольным количеством ключевых аргументов
print_info(name="Alice", age=30, city="New York")
Если у функции нет return, что она вернет по умолчанию
Anonymous Quiz
5%
True
4%
NaN
79%
None
12%
Пустую строку
Что означает полиморфизм в Python?
Anonymous Quiz
68%
Объекты разных типов могут обрабатывать данные по одному и тому же интерфейсу
2%
Исключается перегрузка функций и методов
2%
Все объекты имеют фиксированный тип
27%
Все вышеперечисленное
Немного про области видимости
Имена, определяемые внутри инструкции
Имена, определяемые внутри инструкции
def
, не вступают в конфликт с именами, находящимися за ее пределами, даже если и там и там присутствуют одинаковые имена. Имя X
, которому присвоено значение за пределами данной инструкции, полностью отлично от имени X
, которому присвоено значение внутри инструкции def
.Какой области видимости не существует?
Anonymous Quiz
27%
Нелокальная
2%
Глобальная
32%
Встроенная
39%
Все существуют
Что делает встроенная область видимости в Python?
Anonymous Quiz
5%
Содержит виды ошибок вроде AttributeError
14%
Хранит стандартные функции print(), len(() и проч.
7%
Содержит None, True, False
74%
Все вышеперечисленное
В каком порядке Python сканирует области видимости при поиске той или иной переменной?
Anonymous Quiz
25%
Builtins - Local - Enclosing - Global
37%
Local - Enclosing - Global - Builtins
16%
Enclosing - Local - Global - Builtins
22%
Local - Global - Builtins
Замыкание (closure) представляет функцию, которая запоминает свое лексическое окружение даже в том случае, когда она выполняется вне своей области видимости.
Технически замыкание включает три компонента:
— внешняя функция
— переменные и параметры (лексическое окружение), которые определены во внешней функции.
— вложенная функция
Технически замыкание включает три компонента:
— внешняя функция
multiply()
, которая определяет некоторую область видимости и в которой определены некоторые переменные и параметры - лексическое окружение— переменные и параметры (лексическое окружение), которые определены во внешней функции.
— вложенная функция
inner()
, которая использует переменные и параметры внешней функции.inner()
запоминает окружение, в котором была создана, в частности, значение параметра n
. Кроме того, сама принимает параметр и возвращает произведение параметров n
и m
.Обратите внимание на опережающую ссылку в коде:
Вполне нормально вызывать функцию, определенную после функции, где она вызывается, при условии, что второй оператор
f2(x)
Вполне нормально вызывать функцию, определенную после функции, где она вызывается, при условии, что второй оператор
def
выполняется перед фактическим вызовом первой функции. Код внутри def
никогда не выполняется до тех пор, пока функция не будет действительно вызвана.Если выражение
Лямбда-функция, несмотря на цикл
Чтобы добиться задуманного, нужно передать текущее значение переменной из объемлющей области видимости посредством стандартного значения:
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)