Skip to content

Instantly share code, notes, and snippets.

@gennad
Created May 28, 2011 19:32
Show Gist options
  • Save gennad/997145 to your computer and use it in GitHub Desktop.
Save gennad/997145 to your computer and use it in GitHub Desktop.
Wrapper
#-*- coding: utf-8 -*-
"""
Написать функцию-фабрику, которая будет возвращать функцию сложения с аргументом.
>>> add5 = addition(5) # функция addition возвращает функцию сложения с 5
>>> add5(3) # вернет 3 + 5 = 8
8
>>> add5(8) # вернет 8 + 5 = 13
13
>>> add8 = addition(8)
>>> add8(2) # вернет 2 + 8 = 10
10
>>> add8(4) # вернет 4 + 8 = 12
12
Написать варианты с обычной "внутренней" и анонимной lambda-функцией.
"""
def addition(num):
def f(a):
return a + num
return f
add5 = addition(5)
print add5(3)
# 8
print add5(8)
# 13
add8 = addition(8)
print add8(2) # вернет 2 + 8 = 10
# 10
print add8(4) # вернет 4 + 8 = 12
# 12
def addition2(num):
return lambda a: a + num
add5 = addition2(5)
print add5(3)
# 8
print add5(8)
# 13
add8 = addition2(8)
print add8(2) # вернет 2 + 8 = 10
# 10
print add8(4) # вернет 4 + 8 = 12
# 12
"""
Написать фабрику, аналогичную п.2, но возвращающей список таких функций
>>> additionals = addition_range(0, 5) # список из функций сложения от 0 до 5 включительно
т.е. аналогичное [add0, add1, add2, add3, add4, add5]
"""
def addition_range(begin, end):
result = []
for i in range(begin, end+1):
func = lambda a: a + i
result.append(func)
return result
additionals = addition_range(0, 5)
print additionals
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment