今天讲的这几个函数,许多时候并不是必要的,但却可以让你的代码变得更高效和简洁。
我们通过一个实例来说明这几个函数:
首先,我们有一个存着二进制数据的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);
网友评论