前言
函数式编程不用变量保存状态,不改变变量
高阶函数
- 把函数当作参数传给另一个对象
- 返回值中包含函数
使用的场景演示:
num_test = [1,2,10,5,8,7]
客户说 :对上述列表中的每个值都进行平方操作
我说:这个简单。
方案一:
ret=[] for i in num_test: ret.append(i**2) print(ret)
客户说 :我这几万个列表,都给我来一次上面的操作
我说:.......这个没问题
多个列表,为了避免写重复代码,应该封装在一个函数里,因此
方案二:
def num_t(array): ret=[] for i in num_test: ret.append(i**2) return ret
客户说:又来几万个列表,给我每个值都给我自增1
我想 :......mmp,这货没完了,要是以后又这么不靠谱,又来啥需求的,得有个最终方案了
单独写功能函数,在将功能封装到函数里
方案三:
def reduce_one(x): return x-1 def mult_two(x): return x**2 def num_t(func,array): ret=[] for i in num_test: res = func(i)#调用传入的方法 ret.append(res) return ret print(reduce_one,num_test)
客户 :给你加薪啊!
方案四:(加入匿名函数)
def num_t(func,array): ret=[] for i in num_test: res = func(i)#调用传入的方法 ret.append(res) return ret print(num_t(lambda x:x*2,num_test))
方案五:(map函数)
map(lambda x:x*2,num_test)
内置函数
map()
msg='qweasdasdqwe' map(lambda x:x.upper(),msg) #转换大写
fliter()
peop = ['chen','_liu','huan','_de'] filter(lambda n:not n.startswith('_'),peop) #过滤第一个为"_"的字符串
reduce()
from functools import reduce #导入模块 num_l=[1,2,3,100] print(reduce(lambda x,y:x+y,num_l)) #合并操作
all() any()
all([1,2,0])#将所有的元素都做bool运算,只有全部为真,返回true any([1,2,0])#将所有的元素都做bool运算,只有存在一个为真,返回true
bin() oct() hex()
bin(456)#将整型转换成二进制 oct(456)#将整型转换成八进制 hex(456)#将整型转换成十六进制
bytes()
bytes('你好',encoding='utf-8')#将字符串按照指定编码格式转换成二进制 bytes('你好',encoding='utf-8').decode('utf-8')#解码二进制
chr() ord()
chr(97)#返回ASCLL码的值,返回 a ord('a')#返回在ASCLL码中的位置 返回 97
divmod()
divmod(10,3)#返回10比3的商和余 比如(3,1) 对用于分页操作
eval()
eval('10*2/(6-1)')#提取字符串中的数据结构,返回值为4.0
hash():可hash的数据类型即不可变类型,不可hash的数据类型即可变类型
hash('chen')#根据hash算法返回一个值 数字签名
globals() locals()
globals()#返回当前的全局变量 locals()#返回当前的局部变量
zip()
zip(('chen','liu','hua'),(1,2,3)) 返回一个zip对象 [('a', 1), ('b', 2), ('c', 3)] dic = {'chen':21,'liu':23,'hua':30} zip(dic.keys(),dic.values()) 返回 [('chen', 21), ('liu', 23), ('hua', 30)] 注:传的两个参数只要为序列即可(字符串) zip('abc','123')
min() max()
max()#取可迭代对象中最大的值 max(dic,lambda dic:dic['key'])#当传入一个字典,是可定义匿名函数,实现比较逻辑 min()#取可迭代对象中最小的值
pow()
pow(3,3)#3**3 pow(3,3,2)#3**3%2
round()
round(3.2)#四舍五入操作
slice()
name='abcdefgh' s1=slice(3,5)#定义切片规则 name[s1] s=slice(1,4,2)#定义切片和步长
sorted()
name = [ {'name': 'chen', 'age': 18}, {'name': 'yi', 'age': 16}, {'name': 'hua', 'age': 23}, {'name': 'gong', 'age': 25}, {'name': 'lu', 'age': 22} ] sorted(name,key=lambda lis:lis['age'])#安装age来排序 name = { 'chen': 18, 'yi': 16, 'hua': 23, 'gong': 25, 'lu': 22 } sorted(name, key=lambda key:name[key])#按照value来排序 sorted(zip(name.values(),name.keys()))#得到姓名和年龄
内置函数总览: