5-6 Python 函数式编程常考题

一、函数式编程

Python支持部分函数式编程特性
1.把电脑的运算视作数学上的函数计算(lambda演算)
2.高阶函数:map/reduce/filter
3.无副作用,相同的参数调用始终产生同样的结果

map的用法:

# map
m = list(map(lambda x: x*2, range(10)))
print(m)  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

# 一般推荐列表推导代替 map
l = [i*2 for i in range(10)]
print(l)  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

reduce的用法:

from functools import reduce

l = reduce(lambda x, y: x+y, range(1, 6))  # 求1加到5的和
print(l)  # 15

filter的用法

l = filter(lambda x: x%2==0, range(10))
print(l)  # [0, 2, 4, 6, 8]

# 同样也可以用列表推导
l2 = [i for i in range(10) if i %2 == 0]
print(l2)  # [0, 2, 4, 6, 8]

二、什么是闭包?

Closure
1.绑定了外部作用域的变量的函数
2.即使程序离开外部作用域,如果闭包仍然可见,绑定变量不会销毁
3.每次运行外部函数都会重新创建闭包

代码示例:

from functools import wraps

def cache(func):   # 装饰器
	store = {
     }  # 外部变量

	@wraps(func)
	def _(n):	#  闭包函数
		if n in store:
			return store[n]
		else:
			res = func(n)
			store[n] = res
			return res
	return _

@cache
def f(n):   # 斐波那契数列
	if n <= 1:
		return 1
	return f(n-1) + f(n - 2)


说明:
闭包:引用了外部自由变量的函数
自由变量:不在当前函数定义的变量
特性:自由变量会和闭包函数同时存在

你可能感兴趣的:(Python工程师面试宝典,python,函数式编程,闭包)