Python 的map函数和lambda匿名函数以及join函数

2022-05-14  本文已影响0人  welder77

今天讲的这几个函数,许多时候并不是必要的,但却可以让你的代码变得更高效和简洁。

我们通过一个实例来说明这几个函数:

首先,我们有一个存着二进制数据的list,bit_list.

bit_list = [0,0,0,1,0,0,0,1]

我们需要把它转为字符串打印出来,最终像这样"00010001"。

由于Python的自由,实现的方法多种多样。
我的思路,是先将这里list内的元素,转为字符串类型,然后再用join函数连接起来并打印出来。
我们分步骤实现吧:

首先,是list内的元素,转为字符串。这里会用到map函数和lambda函数,
(1) map函数可以用于快速遍历和处理list内的元素,比如把list内的元素转为str型。
map(function, iterable, ...)
function -- 函数
iterable -- 一个或多个序列

(2) lambda函数又称匿名函数,快速建立一个单行的func,但不需要为其命名。
比如:

lambda x: str(x) 和 以下的函数体,实际是一个东西。

def to_str(x):
      return str(x)

组合下两个函数后,代码如下,这段代码实际是将bit_list中的每一个元素,都代入到lambda中的str(x), 然后将返回值存入一个迭代对象:

bit_list = map(lambda x: str(x) , bit_list )

最后我们来说说join函数,它可以把list中的元素,按顺序连接起来。

语法为 str.join(sequence)
sequence -- 要连接的元素序列。
str -- 连接时添加的间隔字符。空 "" 为什么都不添加

print("".join(bit_list ))

这里你会提出疑问,一个for循环不就能搞定这些吗?为什么还要用那么多函数?
答案是快,list中的元素少时,可能并不明显,但list的元素很多时,map和join的效率远远大于for循环和多次字符串的连接。

试想一下,一个arxml里有成千上万个信号,如果想要批量提取或处理这些信号,用map是不是可节省更多时间。实时处理总线数据的过程中,这些时间的节约是不是也是很有必要的?

另外,以下范例,则可以让map中调用的func,附带list元素以外的额外参数,可让map的使用更为广泛。

from functools import partial

volume_ids = [1,2,3,4,5]
ip= '172.12.13.122'

mapfunc = partial(my_function, ip=ip)
map(mapfunc, volume_ids)

#or

map(lambda ids: my_function(ids, ip), volume_ids);
上一篇下一篇

猜你喜欢

热点阅读