У Python функції є об'єктами першого класу. Це означає, що функцію можна передавати як параметр, присвоювати змінним і навіть повертати з інших функцій:
Присвоєння функції змінній:
def func(x, y):
return x + y
func_alias = func
result = func_alias(2, 3)
print(result) # 5
Передача функції як аргументу:
def sum_func(x, y):
return x + y
def subtraction_func(x, y):
return x - y
def tricky_func(x, y, func):
return func(x, y)
sum_result = tricky_func(2, 3, sum_func)
min_result = tricky_func(2, 3, subtraction_func)
print(sum_result) # 5
print(min_result) # -1
Повернення функції з іншої функції:
def get_operator(operator):
if operator == '+':
return sum_func
elif operator == '-':
return subtraction_func
sum_action_function = get_operator("+")
print(sum_action_function(2, 3)) # 5
Це відкриває широкі можливості для створення гнучких і багаторазових функцій.
Область видимості визначає, де у програмі можна звертатися до змінної або функції. У Python існує чотири області видимості, що утворюють модель LEGB:
Приклад використання:
GLOBAL_VAR = 1
def outer():
enclosed_var = 2
def inner():
local_var = 3
print(local_var, enclosed_var, GLOBAL_VAR)
inner()
outer() # Виведе: 3 2 1
Замикання — це функція, що "пам'ятає" значення змінних з області видимості, де вона була створена, навіть після завершення цієї області.
Приклад:
def adder(val):
def inner(x):
return x + val
return inner
two_adder = adder(2)
print(two_adder(3)) # 5
two_adder
— це функція, яка запам'ятала значення val
, передане в adder
, і додає його до свого аргументу.