python高阶函数和枚举

2021-11-22 16:01:05 浏览数 (1)

python enumerate()函数

用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,可同时得到数据对象的值及对应的索引值。 举个例子:

代码语言:javascript复制
for i in enumerate([i for i in range(5)]):
    print(i)

今天去腾讯笔试的一道 enumerate 题:

代码语言:javascript复制
s=['a','b','c']
dict1 = {j:k for k,j in enumerate(s)}
print(dict1)
print(dict1.keys())
print(dict1.values())

输出结果为:

python 中 map()函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。 也就是说会根据提供的函数对指定序列做映射。Python 2.x 返回列表。python3返回的是一个迭代器。

代码语言:javascript复制
def f(x):
    return x*x
print(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

使用lamdba函数

代码语言:javascript复制
print(map(lambda x: x *x, [1, 2, 3, 4, 5]))

Python filter() 函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

同上面的map一样,Pyhton2.7 返回列表,Python3.x 返回迭代器对象

代码语言:javascript复制
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,3,5,7,9

使用lambda函数:

代码语言:javascript复制
newlist = filter(lambda x:x%2==1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

Python reduce() 函数

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作: 用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

需要先导入reduce

代码语言:javascript复制
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 匿名函数

python枚举Enum

使用枚举需要导入Enum

代码语言:javascript复制
from enum import Enum

定义一个类

代码语言:javascript复制
class Weekdays(Enum):
    Monday=1
    Tuesday=2
    Wedsday=3
#遍历枚举标签
for v in Weekdays.__members__:
    print(v)
代码语言:javascript复制
#遍历枚举类型、标签、值
for v in Weekdays.__members__ .items():
    print(v)
代码语言:javascript复制
print(Weekdays.Monday)   # >>> Weekdays.Monday

枚举的意义重在标签而不在于数值,使用 print(Weekdays.Monday) 打印结果不是1而是Weekdays.Monday,这也符合枚举的意义

代码语言:javascript复制
#获取名字和值
print(Weekdays.Monday.name)
print(Weekdays.Monday.value) 

0 人点赞