python高阶函数和枚举

python enumerate()函数

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

for i in enumerate([i for i in range(5)]):
    print(i)

在这里插入图片描述
今天去腾讯笔试的一道 enumerate 题:

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返回的是一个迭代器。

def f(x):
    return x*x
print(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

使用lamdba函数

print(map(lambda x: x *x, [1, 2, 3, 4, 5]))

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,3,5,7,9

使用lambda函数:

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

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

from enum import Enum

定义一个类

class Weekdays(Enum):
    Monday=1
    Tuesday=2
    Wedsday=3
#遍历枚举标签
for v in Weekdays.__members__:
    print(v)

在这里插入图片描述

#遍历枚举类型、标签、值
for v in Weekdays.__members__ .items():
    print(v)

在这里插入图片描述

print(Weekdays.Monday)   # >>> Weekdays.Monday

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

#获取名字和值
print(Weekdays.Monday.name)
print(Weekdays.Monday.value) 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考古学家lx(李玺)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值