Imooc - Python3 进阶教程: Python的函数式编程

本章讲解Python函数式编程概念,高阶函数的概念和实际用法,以及装饰器函数的原理和实现方式。
更新于: 2022-01-13 05:11:38

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)

参考