Imooc - Python3 进阶教程: Python的函数式编程
本章讲解Python函数式编程概念,高阶函数的概念和实际用法,以及装饰器函数的原理和实现方式。
8-2 Python把函数作为参数
def add(x, y, f):
return f(x) + f(y)
8-3 Python的map()函数
def f(x):
return x*x
for item in map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]):
print(item)
8-4 Python的reduce()函数
def f(x):
return x*x
for item in map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]):
print(item)
8-5 Python的filter()函数
def is_not_empty(s):
return s and len(s.strip()) > 0
for item in filter(is_not_empty, ['test', None, '', 'str', ' ', 'END']):
print(item)
8-8 Python的闭包
# 希望一次返回3个函数,分别计算1x1,2x2,3x3:
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
8-9 Python的匿名函数
result = [
item for item in map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])
]
print(result) # ==> [1, 4, 9, 16, 25, 36, 49, 64, 81]
8-10 Python编写无参数的decorator
def log(f):
def fn(x):
print('call ' + f.__name__ + '()...')
return f(x)
return fn
@log
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print(factorial(10))
8-11 Python编写有参数的decorator
def log(prefix):
def log_decorator(f):
def wrapper(*args, **kw):
print('[{}] {}()...'.format(prefix, f.__name__))
return f(*args, **kw)
return wrapper
return log_decorator
@log('DEBUG')
def test():
pass
8-12 Python的偏函数
偏函数指的就是“创建一个调用另外一个部分参数或变量已经预置的函数”的函数的用法;
Curry 是一种特殊的偏函数
import functools
def int2(x, base=2):
return int(x, base)
int2 = functools.partial(int, base=2)
res1 = int2('1000000')
print(res1)