函数式编程
不可变数据:不用变量保存状态、不修改变量
第一类对象:函数即变量
递归尾调用调优
尾调用优化:函数bar在food内为尾调用
def bar():
return n
def foo():
return bar(x)
函数bar1和bar2在foo内均为尾调用,二者在if判断条件不同的情况下都有肯能作为函数的最后一步
def bar1():
return n
def bar2():
return n+1
def foo():
if type(x) is str:
return bar1(x)
elif type(x) is int:
return bar2(x)
函数bar在foo内为非尾调用
def bar(n):
return n
def foo():
y = bar(x)
return y
函数bar在foo内为非尾调用
def bar(x):
return x
def foo():
return bar(x)+1
map函数 #lambda x:x+n ,map()
求一个列表的所有平方
arra = [1,2,3,1,5]
def map_test(array):
res = []
for i in array:
res.append(i**2)
return res
ret = map_test(arra)
print(ret)
def add_num(x):
return x+1
arra = [1,2,3,1,5]
def map_test(func,array):
ret = []
for i in array:
res = func(i)
ret.append(res)
return ret
print(map_test(add_num,arra))
print(map_test(lambda x:x+1,arra))
print(map_test(lambda x:x-1,arra))
print(map_test(lambda x:x**2,arra))
print(map(lambda x:x**2,arra)) #内置函数map,需要处理一下才能看
过滤 startswith(),endswith(),filter(),lambda n:n.endswith,
arra = ['sn_1','sb_1']
def filter_test(arra,func):
ret = []
for i in arra:
if not func(i):
ret.append(i)
return ret
print(filter_test(arra,lambda n:n.startswith('sb')))
print(filter(lambda n:n.startswith('sb'),arra)) #内置函数filter,需要处理一下才能看,遍历序列中并判断的每一个元素得到布尔值如果是True则留下
reduce函数
from functools import reduce #引入reduce
arra = [1,2,3,1,5]
def redce_test(arra,func,init=None):
if init is None:
res = arra.pop(0) #把第一个数拿出来
else:
res = init
for i in arra:
res = func(res,i)
return res
print(redce_test(arra,lambda x,y:x*y,10))
print(reduce(lambda x,y:x*y,arra,10)) #reduce内置函数
zip实列
p = {'name':'nana','age':'18','gender':'none'}
print(list(zip(p.keys(),p.values())))
#取年龄最大的出来
age_dic = {'agea':20,'ages':30,'ash':18,'ahes':9}
print(max(age_dic.values()))
#取年龄最大的出来
age_dic = {'agea':20,'ages':30,'ash':18,'ahes':9}
print(max(age_dic.values()))
newage = zip(age_dic.values(),age_dic.keys())
for i in newage:
print(i)
print(list(max(newage)))
people = [
{'name':'sad','age':20},
{'name':'sdd','age':20},
{'name':'sda','age':50},
]
print(max(people,key = lambda dic:dic['age']))
sorted() #排序
name_dic = {'ss':23,'bb':12,'cc':56}
print(sorted(name_dic,key = lambda key:name_dic[key]))
print(sorted(zip(name_dic.values(),name.keys())))
__import__() #导入特殊文件 import不能导入字符串
module_name = 'test'
__import__(module_name )
内置函数
abs(1) #获取绝对值
all([1,2,'sa']) #把序列中每一个元素拿出来做布尔运算
any([2,'']) #y有空返回False
bin(2) #把十进制转二进制
hex() #十进制转十六进制
oct() #十进制转八进制
bytes('你那',encoding='utf-8',decode='utf-8') #把字符串转字节 编码 解码
chr(97) #阿史克码
ord(a) #对应编码
dir(all) #打印某一个对象的方法
divmod(10,3) #取除、余数
eval() #1、把字符串中的数据结构提取出来,2、可以计算字符串中的数学运算
hash() #哈希运算,可哈希运算即不可变数据类型,不可哈希的及可变数据类型
help() #帮助
isinstance(1,int) #判断是否是int类型,返回True or False ,int可换成str、bool......list
globals()
locals() #打印局部的
max([1,2,3]) #取最大值
min([1,2,3]) #取最小值
zip(('a','b','c'),(1,2,3))
pow(3,3) #3**3
pow(3,3,2) #3**3%2
reversed() #反转
round() #四舍五入
set() #转字典
slice(3,5) #类似切片
slice(3,5,2) #类似切片 2为步长
sorted() #排序
sum() #求和
vars() #查看方法下的函数
__import__() #导入特殊文件 import不能导入字符串