map()函数是python内置的高阶函数,作用是接收一个函数和一个可迭代对象,把可迭代对象的元素依次作用在函数上,得到一个新的可迭代对象。

多说无益看个例子:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
res = map(lambda x:x**2,[1,5,7,4,8])
print(list(res)) #[1, 25, 49, 16, 64]
print(list(res)) #[]

what?当我第二次再次输出list(res)时打印的是空列表,抱着这种疑惑我查询了map()函数的源码:

class map(object):
    """
    map(func, *iterables) --> map object
    
    Make an iterator that computes the function using arguments from
    each of the iterables.  Stops when the shortest iterable is exhausted.
    """

对呀,map确实接收的是一个函数还有可迭代对象,但是下面的英语是什么意思呢?so easy.意思很简单就是说,创建一个迭代器,使用迭代器的每个元素完成函数的功能,当迭代器耗尽时停止。

但是这跟我第二次输出空列表有什么关系呢?思来想去,我觉得应该是这样的,第一次print(list(res))时迭代器运行到最后一个元素8了,那么第二次再次print(list(res))时迭代器从8开始位置继续运行,结果8后面什么也没有,结果就是空列表。

我靠,这样的话,那我这个list(res)只能用一次吗?这岂不是很扯吗?

可以这样做,将list(res)赋值给一个变量即可,这样每次使用使用这个变量即可。

res = map(lambda x:x**2,[1,5,7,4,8])
value= list(res)
print(value)#[1, 25, 49, 16, 64]
print(value)#[1, 25, 49, 16, 64]

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄