【发布时间】:2011-09-02 23:21:18
【问题描述】:
比较这些时,您认为哪个更直观/更易于阅读?
>>> [ord(i) for i in 'some string']
[115, 111, 109, 101, 32, 115, 116, 114, 105, 110, 103]
>>> map(ord,'some string')
[115, 111, 109, 101, 32, 115, 116, 114, 105, 110, 103]
lambda/map 方式有什么好处吗?
【问题讨论】:
-
我更喜欢第一个,更容易阅读。
-
我在这里似乎是一个孤独的声音,但我认为第二个更具可读性。
i在第一个示例中没有实际的语义内容,因此第二个更短(通常本身更好),并且它还需要跟踪的东西更少。当对象具有语义内容时,这会更加清晰,因此您很想使用更详细的变量来保持代码的可读性:例如[get_foo_for_barspam(barspam) for barspam in barspams]也就是说,理解有优势(例如元组解包)并且它们更加灵活比地图(尽管另见itertools.starmap)。 -
我发现地图更直观。但它非常主观,我在了解列表推导之前就了解了 map,这可能就是原因。我发现 RecursivelyIronics 关于 i 缺乏语义价值的观点是有优点的。此外,地图方式更短。长度论点很蹩脚,但至少是客观的。
-
需要注意的是,链接问题的OP中的性能数字已经过时了。显然,最近的版本显着提高了
map与理解的相对性能。是的,我确实考虑到需要明确列出结果。