koj*_*iro 6 python iteration syntax readability
map
并filter
经常与列表内涵互换,但reduce
不那么容易换出的map
和filter
(再说,在某些情况下,我还是比较喜欢的功能语法反正).但是,当你需要对参数本身进行操作时,我发现自己正在进行语法体操,并最终必须编写整个函数来保持可读性.
我将使用map
插图单元测试简单,但请记住,现实生活中的用例可能更难以表达为列表理解.
我发现了两种混乱的方法,但我实际上并没有使用它.
[afunc(*i) for i in aniter] == map(afunc, *zip(*aniter))
[afunc(*i) for i in aniter] == map(lambda i: apply(afunc, i), aniter)
Run Code Online (Sandbox Code Playgroud)
是否有任何简洁,优雅的方式来表达这些表达的右手边?
Mar*_*ers 11
查看itertools的工具,让您的生活更轻松.
例如,您发布的代码已经可用itertools.starmap
.
itertools.starmap(afunc, aniter)
Run Code Online (Sandbox Code Playgroud)
从文档:
创建一个迭代器,使用从iterable中获取的参数来计算函数.当参数参数已经从单个可迭代的元组中分组时(数据已被"预压缩"),使用而不是imap().imap()和starmap()之间的区别与函数(a,b)和函数(*c)之间的区别相似.相当于:
Run Code Online (Sandbox Code Playgroud)def starmap(function, iterable): # starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000 for args in iterable: yield function(*args)
还隐藏着其他好东西itertools
,所以我建议您仔细阅读文档,看看是否还有其他可以使用的东西.该食谱节还表明,你可以使用可用的功能的方式itertools
来解决各种各样的问题.即使您找不到能够解决您的确切要求的食谱,您也可以使用一些被证明是灵感来源的想法.
归档时间: |
|
查看次数: |
82 次 |
最近记录: |