Log 模块资料
https://www.cnblogs.com/yyds/p/6901864.html
Python 语言的高级特性:
函数式编程(FunctionalProgramming)
基于lambda 演算的一种编程方式
程序中只有函数
函数可以作为参数,同样可以作为返回值
纯函数式编程语言:LISP ,Haskell
Python 函数式编程只是借鉴函数式编程的一些特点,可以理解为一般函数式一半Python
包含的内容:
高阶函数
返回函数
匿名函数
装饰器
偏函数
匿名函数:Lambda 表达式
函数 :最大程度复用代码,如果函数很小,很短,则会造成啰嗦
如果函数被调用的次数少,则会造成浪费
对于读者来说,造成阅读流程的被迫中断
Lambda 表达式(匿名函数):
一个表达式,函数体相对简单
不是一个代码块,仅是一个表达式,可以有一个或多个参数,参数间用逗号隔开
Lambda 表达式用法:
以 Lambda 开头
紧跟一定的参数(如果有的话)
参数后面用冒号将表达式和主体隔开
只是一个表达式,所以,没有return
使用 Lambda 表达式计算一个数字的100倍数
因为就是一个表达式,所以没有 return
stm = lambda x: 100 * x
Lambda 函数的调用与函数的调用一模一样
stm(89)
多个参数的 Lambda 表达式
stm1 = lambda x,y,z: x + y * 10 + z * 10 stm1(4,5,6)
高阶函数
把函数作为参数使用的函数,叫做高阶函数
变量可以赋值
a = 100
b = a
函数名就是一个变量
def funA(): print("In funA")
funB = funA
funB()
以上代码得出的结论:
函数名称是变量
funA 和 funB 只是名称不一样而已
既然函数名称是变量,则应该可以被当成参数传入到另一个函数中
高价函数实例:
# funA 是普通函数,返回一个数字的一百倍 def funA(n): return n *100 # 在写个函数,把传入的参数乘以 300 倍,利用高阶函数 def funB(n): reutrn funA * 3 funB(9) # 写一个高阶函数 def funC(n,f): # 假定函数是把 n 扩大 100 倍 return f(n) * 3 print(funC(9,funA)
比较两种函数的写法,可以看出 funC 写法要优于 funB
例如:
def funD(n): return n * 10 # 需求变更,需要把 n 放大 30 倍,此时 funB 无法实现 print(funC(7,funD))
系统高阶函数 - map
本意就是映射,把集合或列表的元素,每一个元素都按照一定规则进行操作,生成一个新的列表或集合
map 函数是系统提供的具有映射功能的函数,返回值是一个迭代对象
# map 函数实例 # 有一个列表,想对列表的每一个元素乘以 10 ,并的到新的列表 L1 = [i for i in range(10)] print(l1) L2 = [] for i in L1: L1.append(i * 10) print(L2)
利用 map 实现此功能
def mulTen(n): return n * 10 L3 = map(mulTen,L1) for i in L3: print(i)
reduce :
本意就是归并,缩减
把一个可迭代对象最后归并成一个结果
对于函数参数有要求:必须有两个参数,必须返回结果
reduce([1,2,3,4,5]) == f(f(f(f(1,2),3),4),5)
reduce 需要导入 functools 包
实例如下:
from functools import reduce # 定义一个操作函数 # 加入操作函数只是相加 def myAdd(x,y): return x + y # 对于列表 [1,2,3,4,5,6]执行myAdd 的 reduce 操作 rst = reduce(myAdd,[1,2,3,4,5,6]) print(rst)