函数式编程
函数式编程是指用一系列函数解决问题
函数是一等公民(Guido)
好处:
用每个函数完成细小的功能,一系列韩式的任意组合可以解决大问题
函数仅接受输入并产生输出,不包含任何能影响输出的内部状态
函数的可重入性
当一个函数的输入实参一定,结果也必然一定的函数称为可重入函数
说明:
可重入函数在函数内部一定不访问除局部变量以外的变量
高阶函数
High order Function
map filter sorted
什么是高阶函数
满足下一条件中一个的函数即为高阶函数
1、函数接受一个或多个函数作用参数传入
2、函数返回一个函数
map 函数
map(func,*iterable)
map(func, *iterables) 返回一个可迭代对象,此可迭代对象用
函数func对可迭代对象iterables中的每一个元素作为参数计算后得到结果;
当最短的一个可迭代对象不再提供数据时此可迭代对象生成结束
def power2(x):
return x ** 2
#生成一个可迭代对象,此可迭代可以生成1-9的整数的平方
for x in map(power2,range(1,10)):
print(x)
filter(function, iterable)
返回一个可迭代器对象,此可迭代对象将对iterabler获取到的数据
用函数function 进行筛选.function将对iterable中的每个元素进行求值,
返回False则将此数据丢弃,返回True,则保留此数据
示例:
def isodd(x):
return x % 2 == 1
#打印0-10之间所有的奇数
for x in filter(isodd,range(11))
print(x)
sorted(iterable,key=None,reverse=False)
返回一个新的包含有所有可迭代对象中数据升序排序的列表
iterable 可迭代对象
key 函数是用来提供一个值,这个值将作为排序的依据
reverse 标志用来设置是否降序排序
示例:
l=[5,-2,-4,0,3,1]
l2=sorted(l) #l2=[-4,-2,0,1,3,5]
l3 = sorted(l,reverse=True) 降序
l4 = sorted(l,key=abs)
递归函数 recursion
函数直接或简介的调用自身
示例:
#函数直接调用自身
def f():
f() #调用自己
f()
#函数间接调用自身
def fa():
fb()
def fb():
fa()
fa()
递归说明:
递归一定要控制递归的层数,当符合某一条件时要终止递归调用几乎所有的递归都能用while循环来代替
递归的优缺点:
优点:递归可以把问题简单化,让思路更为清晰,代码更为简洁
缺点:递归因系统环境的影响大,当递归深度太大时,可能会得到不可预知的结果
递归函数的执行分为俩个阶段:
递推阶段:调用进入函数内部
回归阶段:返回结果。得到最终结果
闭包 closure
什么是闭包?
闭包是指引用了此函数外部变量的函数
(外部变量是指:外部嵌套函数作用域内的变量)
闭包必须满足三个条件:
1、必须有一个内嵌函数
2、内嵌函数必须引用外部函数中的变量
3、外部函数返回值必须是内嵌函数
注意点:
由于闭包会使得函数中的变量都被保留在内存中,内存消耗比较大,所以不能滥用闭包
闭包测试题
试看下列程序的执行结果是什么?
def get_funs(n):
L=[]
for i in range(n):
L.append(lambda x:x*i)
return L
funs = get_funs(4)
print(funs[0](10))
print(funs[1](10))
print(funs[2](10))
print(funs[3](10))
注意:列表里添加的都是表达式