什么是函数式编程呢?一定要和函数区分开,函数式编程允许把函数本身作为一个参数传入到另一个函数,并允许返回一个函数
偏函数(Partial Function)
functions.partial作用:
把一个函数的某些参数固定住(即设为默认值,返回一个新函数)
栗子:
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
装饰器(懂些皮毛,看这两个博文)
定义:在代码运行期间动态增加功能的方式(换成白话:不修改原来代码的前提下,给函数增加新的功能)
本质:返回一个函数的高阶函数
python装饰器详解
python装饰器–原来如此简单
匿名函数(学会使用哦)
- 匿名函数也是一个函数对象,可以将其赋值给一个变量,然后通过变量调用该函数
- 也可以将匿名函数作为函数值返回
def build(x,y):
return lambda x*x+y*y
返回函数(主要是闭包这个东西)
何为闭包
如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
实例
#闭包函数的实例
# outer是外部函数 a和b都是外函数的临时变量
def outer( a ):
b = 10
# inner是内函数
def inner():
#在内函数中 用到了外函数的临时变量
print(a+b)
# 外函数的返回值是内函数的引用
return inner
if __name__ == '__main__':
# 在这里我们调用外函数传入参数5
#此时外函数两个临时变量 a是5 b是10 ,并创建了内函数,然后把内函数的引用返回存给了demo
# 外函数结束的时候发现内部函数将会用到自己的临时变量,这两个临时变量就不会释放,会绑定给这个内部函数
demo = outer(5)
# 我们调用内部函数,看一看内部函数是不是能使用外部函数的临时变量
# demo存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数
demo() # 15
demo2 = outer(7)
demo2()#17
注意:返回函数不要引用任何循环变量或者后续会发生变化的变量
高阶函数
何为高阶函数:一个函数可以接受另一个函数作为参数
map
map将传入的函数依次作用于序列的每个元素,并把结果作为新的Iterator返回
map(函数,Iterable)
reduce
将函数作用在序列上,reduce把结果继续和序列的下一个元素做求和运算
reduce(函数,[x1,x2,x3...])
filter
用于过滤序列,filter()把传入的函数依次作用于每个元素,然后根据返回值True还是False决定保留还是丢弃该元素
filter(函数,序列)
sorted
对list进行排序,通过key关键字可实现自定义排序,比如:
key = abs
key = str.lower
reverse = True