零基础学python-19.11 使用迭代工具模拟map
这一章节我们来讨论一下使用迭代工具模拟map。在讨论之前,我们先看一些例子:
>>> list(zip(,))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip('abcdef','gh'))
[('a', 'g'), ('b', 'h')]
>>> list(zip())
[(1,), (2,), (3,)]
>>> list(map(abs,[-2,-1,0,1,2]))
>>> list(map(pow,,))
>>>
从上面的代码我们看出什么呢? 1.zip对序列的配对操作
2.map的一般使用
3.map里面的嵌套操作,有着zip的参与
我们今天就来使用zip模拟一下map,也就是最后一行代码:
>>> list(map(pow,,))
>>>
上面的代码里面,其实非常明显的进行了zip的配对操作,我们下面给出等价代码:
>>> def test(func,*args):
res=[]
for item in zip(*args):
res.append(func(*item))
return res
>>> test(pow,,)
>>>
注意:上面的代码非常依赖*args的传入语法,如果有一些问题,就会报错。 上面的代码是先通过zip解析配对*args传入的序列,然后将解析序列的对象当做参数传到func这个函数对象里面
上面的代码我们通过使用for来实现,下面我们来看看使用列表解析
>>> def test(func,*args):
return
>>> test(pow,,)
>>>
上面的代码返回一样的结果,但是代码已经精简了许多。
继续,由于之前我们学到生成器,因此下面我们使用生成器来实现,这样可以降低运行时的内存浪费,提供性能
>>> def test(func,*args):
return (func(*item) for item in zip(*args))
>>> test(pow,,)
<generator object <genexpr> at 0x0240C030>
>>> list(test(pow,,))
>>>
>>> def test(func,*args):
for item in zip(*args):
yield func(*item)
>>> test(pow,,)
<generator object test at 0x02404FD0>
>>> list(test(pow,,))
>>>
上面的代码分别通过yield以及生成器表达式来实现,从而提高性能与降低内存浪费。
总结:这一章节主要讨论了使用迭代工具模拟map,并且讨论了如何使用生成器来提高性能。
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
页:
[1]