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()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的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是一个IteratorIterator是惰性序列,因此通过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:内置函数匿名函数递归函数的主要内容,如果未能解决你的问题,请参考以下文章

python全栈开发-Day12 三元表达式函数递归匿名函数内置函数

函数递归+匿名函数+内置函数day15

Day3-递归函数高阶函数匿名函数内置函数

day23 内置函数,匿名函数,递归

day4之内置函数匿名函数,递归函数

Python基础day-11[内置函数(未完),递归,匿名函数]