python高阶函数和枚举
python enumerate()函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,可同时得到数据对象的值及对应的索引值。
举个例子:
for i in enumerate([i for i in range(5)]):
print(i)
- 1
- 2
今天去腾讯笔试的一道 enumerate 题:
s=['a','b','c']
dict1 = {j:k for k,j in enumerate(s)}
print(dict1)
print(dict1.keys())
print(dict1.values())
- 1
- 2
- 3
- 4
- 5
输出结果为:
python 中 map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
也就是说会根据提供的函数对指定序列做映射。Python 2.x 返回列表。python3返回的是一个迭代器。
def f(x):
return x*x
print(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
- 1
- 2
- 3
使用lamdba函数
print(map(lambda x: x *x, [1, 2, 3, 4, 5]))
- 1
Python filter() 函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
同上面的map一样,Pyhton2.7 返回列表,Python3.x 返回迭代器对象
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
for i in newlist:
print(i,end=' ')
- 1
- 2
- 3
- 4
- 5
- 6
输出的结果是 1,3,5,7,9
使用lambda函数:
newlist = filter(lambda x:x%2==1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
- 1
Python reduce() 函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作: 用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
需要先导入reduce
from functools import reduce
def add(x, y) : # 两数相加
return x + y
print(reduce(add, [1, 2, 3, 4, 5]))
# 计算列表和:1+2+3+4+5
print(reduce(lambda x, y: x+y, [1,2,3,4,5])) # 使用 lambda 匿名函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
python枚举Enum
使用枚举需要导入Enum
from enum import Enum
- 1
定义一个类
class Weekdays(Enum):
Monday=1
Tuesday=2
Wedsday=3
#遍历枚举标签
for v in Weekdays.__members__:
print(v)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
#遍历枚举类型、标签、值
for v in Weekdays.__members__ .items():
print(v)
- 1
- 2
- 3
print(Weekdays.Monday) # >>> Weekdays.Monday
- 1
枚举的意义重在标签而不在于数值,使用 print(Weekdays.Monday) 打印结果不是1而是Weekdays.Monday,这也符合枚举的意义
#获取名字和值
print(Weekdays.Monday.name)
print(Weekdays.Monday.value)
- 1
- 2
- 3
文章来源: blog.csdn.net,作者:考古学家lx,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_43582101/article/details/89926119
- 点赞
- 收藏
- 关注作者
评论(0)