匿名函数:不需要指定显示的指定函数(lambda)
def int(n) : return n**(n+1) print(int(2))
lambda n:n**(n+1) print(int(2))
匿名函数的应用:
dic={'k1':10,'k2':100,'k3':30} print(max(dic)) print(dic[max(dic,key=lambda k:dic[k])])
res = map(lambda x:(x+1)**2,[1,3,7,4,9]) for i in res: print(i)
函数式编程:
高阶函数:满足以下一个即可
1.函数的传入参数是一个函数名
2.函数的返回值是一个函数名
map函数:处理序列中的每个元素,得到的结果是一个"列表",该"列表"元素个数和位置与原来一样
array=[1,3,4,71,2] ret=[] for i in array: ret.append(i**2) print(ret) #如果我们有一万个列表,那么你只能把上面的逻辑定义成函数 def map_test(array): ret=[] for i in array: ret.append(i**2) return ret print(map_test(array)) #如果我们的需求变了,不是把列表中每个元素都平方,还有加1,减一,那么可以这样 def add_num(x): return x+1 def map_test(func,array): ret=[] for i in array: ret.append(func(i)) return ret print(map_test(add_num,array)) #可以使用匿名函数 print(map_test(lambda x:x-1,array))
reduce函数:
array=range(100) def reduce_test(func,array): l=list(array) res=l.pop(0) for i in l: res=func(res,i) return res print(reduce_test(lambda x,y:x+y,array))
filter函数:遍历序列中的每个元素,判断每个元素得到的布尔值,若为True则保留
movie_people=['alex','wupeiqi','yuanhao','sb_alex','sb_wupeiqi','sb_yuanhao'] def tell_sb(x): return x.startswith('sb') def filter_test(func,array): ret=[] for i in array: if func(i): ret.append(i) return ret print(filter_test(tell_sb,movie_people)) print(filter(lambda x:x.startswith('sb'),movie_people))
内置函数:
abs:求绝对值 all:将序列值拿出来做布尔值(一假全假) any:将序列值拿出来做布尔值(一真全真)
bin:十进制转为二进制 hex:十进制转为十六进制 oct:十进制转为八进制
bool:做布尔值(假:none、0、空) bytes:将字符串转换成字节
dir:返回当前范围内的变量、方法和定义类型列表 divmod:除商得余数(用于分页功能) eval:将数据从字符串结构中提取出来进行运算
hash:进行hash运算得出的结果是固定位数的(可hash的数据类型是不可变数据类型) isinstance:判断数据类型,返回结果为布尔值
locals:显示局部变量 globals:显示全局变量 zip:序列中的元素一一对应显示
max/min :最大最小值(同一类型数据的元素才可以依次进行比较) pow(a,b,c):a的b次方再除c取余
reverse:数据进行反转 chr:传入一个数值,根据ASCLL表输出对应字符 ord:传入一个字符,根据ASCALL表输出对应数值
round:四舍五入 slice:切片取值 sorted:通过比较大小进行排序 vars:无参数时与locals一样
import:导入模块,直接调用已有模块 -import-:字符串类型进行导入模块