函数式编程:指用一系列的函数来解决问题
函数的可重入性:
可重入是指一个函数传的参数一定,则结果必须一定
要求:def 定义的函数不要访问除局部变量以外的变量
高阶函数 high order function
什么是高阶函数:
满足下列一个条件的函数即高阶函数:
1.函数接受一个或多个函数作为参数传入
2.函数返回一个函数
Python 中内建的高阶函数:map,filter,sorted
map(函数,*可迭代对象) 用函数和可迭代对象中的每一个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象不再提供数据时,此可迭代对象生成结束
如:def pow2(X):
return X**2
for X in map(pow2, range(1,10)):
print(X)
filter(函数, 可迭代对象) 筛选可迭代对象中的数据,返回一个可迭代对象,此可迭代对象将对 传入的可迭代对象 进行筛选
说明:函数将对每个元素进行求值,返回 False则将此数据丢弃,返回True则保留
如:def isjishu(x):
return x % 2 == 1
for x in filter(isjishu, range(10)):
print(x)
sorted(可迭代对象,key=None, reverse=False)将原可迭代对象的数据进行排序,生成排序后的列表
注意:key 其实是一个函数
说明:key 函数是用来提供一个参考值,这个值将作为排序的依据 reverse 标志用来设置是否降序排序
如:L = [5,6,-2,-5,8,1,0,3,2]
L2 = sorted(L) #从小到大排
L2 = sorted(L,reverse=True) # 从大到小排
L2 = sorted(L,key=abs) #根据绝对值排序
递归函数 recursion
函数直接或间接的调用自身
直接调用自身:
def a():
print('从前有座山,山上有个庙,庙里有个老和尚在讲故事')
a()
a()
间接调用自身:
def a():
b()
def b():
a()
递归说明:递归一定要控制递归的层数,当符合某一条件时要终止递归,几乎所有的递归都能用while循环来代替
递归的优缺点:
优点:递归可以把问题简单化,让思路更为清晰,代码更简洁
缺点:递归因系统环境影响大,当递归深度太大时,可能会得到不可预知的结果
闭包 closure
将内嵌函数的语句和这些语句的执行环境打印在一起时,得到 的对象称为闭包
闭包必须满足三个条件:
1.必须有一个内嵌函数
2.内嵌函数必须引用外部函数中的变量
3.外部函数返回值必须是内嵌函数
如:
def make_power(y):
def fx(arg):
return arg ** y
return fx
pow2 = make_power(2)
print('3的平方是:',pow2(3)) #9
pow3 = make_power(3)
print('3的立方是:',pow3(3)) #27