Day10:内置函数匿名函数递归函数
Posted Wang-Vee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day10:内置函数匿名函数递归函数相关的知识,希望对你有一定的参考价值。
一.内置函数
1.数学运算类
2.集合类操作
内置函数个别使用示例
1.any 集合中的元素有一个为真的时候为真, 特别的,若为空串返回为False
1 print(any([0,\'\'])) 2 print(any([0,\'\',1]))
执行结果
1 False 2 True
2.divmod 取商得余数,用于做分页显示功能
1 print(divmod(10,3)) #取商得余数,用于做分页显示
执行结果
1 (3, 1)
3.eval 把字符串中的数据结构给提取出来
1 dic={\'name\':\'alex\'} #字典类型转成字符串 2 dic_str=str(dic) 3 print(dic_str) 4 5 d1=eval(dic_str) #eval:把字符串中的数据结构给提取出来 6 print(d1)
执行结果
1 {\'name\': \'alex\'} 2 3 {\'name\': \'alex\'}
4.可hash的数据类型即不可变数据类型,不可hash的数据类型即可变数据类型
1 #hash的作用:去网上下载软件,判断是否被人修改,通过比对hash值,就知道 2 print(hash(\'12sdfdsaf3123123sdfasdfasdfasdfasdfasdfasdfasdfasfasfdasdf\')) 3 print(hash(\'12sdfdsaf31231asdfasdfsadfsadfasdfasdf23\')) 4 5 name=\'alex\' 6 print(hash(name)) 7 print(hash(name)) 8 9 print(\'--->before\',hash(name)) 10 name=\'sb\' 11 print(\'=-=>after\',hash(name))
执行结果
1 1982976672 2 864959982 3 -2006403263 4 -2006403263 5 --->before -2006403263 6 =-=>after 805524431
5.bin、hex、oct 进制转换
1 print(bin(10)) #10进制->2进制 2 print(hex(12)) #10进制->16进制 3 print(oct(12)) #10进制->8进制
执行结果
1 0b1010 #10进制->2进制 2 0xc #10进制->16进制 3 0o14 #10进制->8进制
6.isinstance判断类型
1 print(isinstance(1,int)) #判断是不是int类型 2 print(isinstance(\'abc\',str)) #判断字符串 3 print(isinstance([],list)) #判断列表 4 print(isinstance({},dict)) #判断字典 5 print(isinstance({1,2},set)) #判断集合
执行结果
1 True 2 True 3 True 4 True 5 True
7.max 最大值 和 min最小值
1 l=[1,3,100,-1,2] 2 print(max(l)) 3 print(min(l))
执行结果
1 100 #最大值 2 -1 #最小值
max 高级用法
说明:
1、max函数处理的是可迭代对象,相当于一个for循环取出每个元素进行比较
注意:不同类型之间不能进行比较
2、每个元素间进行比较,是从每个元素的第一位置依次比较,如果这一个位置分出大小,后
面的都不需要比较了,直接得出这俩元素的大小。
1 age_dic={\'alex_age\':18,\'wupei_age\':20,\'zsc_age\':100,\'lhf_age\':30} 2 print(max(age_dic.values())) #取出最大年龄 3 print(max(age_dic)) #默认比较的是字典的key
执行结果
1 100 2 zsc_age
ps: 取出年龄最大的key和values
1 age_dic={\'alex_age\':18,\'wupei_age\':20,\'zsc_age\':100,\'lhf_age\':30} 2 for item in zip(age_dic.values(),age_dic.keys()): #[(18,\'alex_age\') (20,\'wupeiqi_age\') () () ()] 3 print(item) 4 5 #取出年龄最大的key和values 6 print(\'=======>\',list(max(zip(age_dic.values(),age_dic.keys())))) #max和zip联合使用
执行结果
1 (100, \'zsc_age\') 2 (30, \'lhf_age\') 3 (18, \'alex_age\') 4 (20, \'wupei_age\') 5 6 7 =======> [100, \'zsc_age\'] #取出年龄最大的key和values
ps.
1 l=[ 2 (5,\'e\'), 3 (1,\'b\'), 4 (3,\'a\'), 5 (4,\'d\'), 6 ] 7 l1=[\'a10\',\'b12\',\'c10\',100] #不同类型之间不能进行比较 8 l1=[\'a10\',\'a2\',\'a10\'] #不同类型之间不能进行比较 9 print(list(max(l))) 10 11 print(\'--->\',list(max(l1)))
执行结果
1 [5, \'e\'] 2 ---> [\'a:\', \'2\']
8.zip 将对象逐一配对
PS1
1 print(list(zip((\'a\',\'n\',\'c\'),(1,2,3)))) 2 print(list(zip((\'a\',\'n\',\'c\'),(1,2,3,4)))) 3 print(list(zip((\'a\',\'n\',\'c\',\'d\'),(1,2,3))))
执行结果
1 [(\'a\', 1), (\'n\', 2), (\'c\', 3)] 2 [(\'a\', 1), (\'n\', 2), (\'c\', 3)] 3 [(\'a\', 1), (\'n\', 2), (\'c\', 3)]
ps2:
1 p={\'name\':\'alex\',\'age\':18,\'gender\':\'none\'} 2 print(list(zip(p.keys(),p.values()))) 3 print(list(p.keys())) #取keys 4 print(list(p.values())) #values 5 6 print(list(zip([\'a\',\'b\'],\'12345\'))) #列表,只要是序列就可以打印出来
执行结果
1 [(\'age\', 18), (\'name\', \'alex\'), (\'gender\', \'none\')] 2 [\'age\', \'name\', \'gender\'] 3 [18, \'alex\', \'none\'] 4 [(\'a\', \'1\'), (\'b\', \'2\')]
PS3:总结
1 l=[1,3,100,-1,2] 2 print(max(l)) #比较出最大值 3 4 5 dic={\'age1\':18,\'age2\':10} 6 print(max(dic)) #比较的是key 7 8 9 print(max(dic.values())) #比较的是key,但是不知道是那个key对应的值 10 11 12 print(max(zip(dic.values(),dic.keys()))) #结合zip使用
执行结果
1 100 #比较大小,得出最大值 2 3 age2 #比较的是key 4 5 18 #比较的是key,但是不知道是那个key对应的值 6 7 (18, \'age1\') #结合zip拿用
ps:
1 people=[ 2 {\'name\':\'alex\',\'age\':1000}, 3 {\'name\':\'wupei\',\'age\':10000}, 4 {\'name\':\'yuanhao\',\'age\':9000}, 5 {\'name\':\'linhaifeng\',\'age\':18}, 6 ] 7 # max(people,key=lambda dic:dic[\'age\']) 8 print(max(people,key=lambda dic:dic[\'age\'])) #提取年龄中的values,再进行比较 9 10 #上面题分解步骤,先取出ret的值,再给max进行比较 11 people=[ 12 {\'name\':\'alex\',\'age\':1000}, 13 {\'name\':\'wupei\',\'age\':10000}, 14 {\'name\':\'yuanhao\',\'age\':9000}, 15 {\'name\':\'linhaifeng\',\'age\':18}, 16 ] 17 18 ret=[] 19 for item in people: 20 ret.append(item[\'age\']) 21 print(ret) 22 max(ret)
执行结果
1 #提取年龄中的values,再进行比较大小,得出age最大的 2 3{\'name\': \'wupei\', \'age\': 10000} 4 5 6 #上面题分解步骤,先取出ret的值,再给max进行比较,得出的值: 7 8 [1000, 10000, 9000, 18]
9.reversed 反转
1 l=[1,2,3,4] 2 print(list(reversed(l))) 3 print(l)
执行结果
1 [4, 3, 2, 1] #反转 2 [1, 2, 3, 4]
10.round 四舍五入
1 print(round(3.5)) #四舍五入
执行结果
1 4
11.slice 切片
1 l=\'hello\' 2 s1=slice(3,5) #切片 取3到5的元素 3 s2=slice(1,4,2) #切片,指定步长为2 4 print(l[3:5]) 5 6 print(l[s1]) #切片 7 print(l[s2]) 8 9 print(s2.start) #开始 10 print(s2.stop) #结束 11 print(s2.step) 步长
执行结果
1 lo 2 3 lo 4 5 el 6 7 1 8 9 4 10 11 2
12.sorted 排序
ps1:
1 l=[3,2,1,5,7] 2 l1=[3,2,\'a\',1,5,7] 3 print(sorted(l)) #排序 4 # print(sorted(l1)) #直接运行会报错,因为排序本质就是在比较大小,不同类型之间不可以比较大小
执行结果
1 [1, 2, 3, 5, 7]
ps2:
1 people=[ 2 {\'name\':\'alex\',\'age\':1000}, 3 {\'name\':\'wupei\',\'age\':10000}, 4 {\'name\':\'yuanhao\',\'age\':9000}, 5 {\'name\':\'linhaifeng\',\'age\':18}, 6 ] 7 print(sorted(people,key=lambda dic:dic[\'age\'])) #按年龄进行排序
执行结果
1 [{\'age\': 18, \'name\': \'linhaifeng\'}, {\'age\': 1000, \'name\': \'alex\'}, {\'age\': 9000, \'name\': \'yuanhao\'}, {\'age\': 10000, \'name\': \'wupei\'}]
ps3:
1 name_dic={ 2 \'abyuanhao\': 11900, 3 \'alex\':1200, 4 \'wupei\':300, 5 } 6 print(sorted(name_dic)) #按key排序 7 8 print(sorted(name_dic,key=lambda key:name_dic[key])) #取出字典的values 9 10 print(sorted(zip(name_dic.values(),name_dic.keys()))) #按价格从低到高排序
执行结果
1 [\'abyuanhao\', \'alex\', \'wupei\'] 2 3 [\'wupei\', \'alex\', \'abyuanhao\'] 4 5 [(300, \'wupei\'), (1200, \'alex\'), (11900, \'abyuanhao\')]
3.高阶函数
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回。
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]
上,就可以用map()
实现如下:
现在,我们用Python代码实现:
>>> def f(x): ... return x * x ... >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> list(r) [1, 4, 9, 16, 25, 36, 49, 64, 81]
map()
传入的第一个参数是f
,即函数对象本身。由于结果r
是一个Iterator
,Iterator
是惰性序列,因此通过list()
函数让它把整个序列都计算出来并返回一个list。
你可能会想,不需要map()
函数,写一个循环,也可以计算出结果:
L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) print(L)
的确可以,但是,从上面的循环代码,能一眼看明白“把f(x)作用在list的每一个元素并把结果生成一个新的list”吗?
所以,map()
作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\']
只需要一行代码。
再看reduce
的用法。reduce
把一个函数作用在一个序列[x1, x2, x3, ...]
上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方说对一个序列求和,就可以用reduce
实现:
>>> from functools import reduce >>> def add(x, y): ... return x + y ... >>> reduce(add, [以上是关于Day10:内置函数匿名函数递归函数的主要内容,如果未能解决你的问题,请参考以下文章