我是 python 新手,正在阅读 Sublime Text 插件的一些代码,遇到了一些我不熟悉的代码。
views = [v for v in sublime.active_window().views()]
这是我不明白的“[v for v”部分。这段代码到底在做什么?
提前致谢!
我是 python 新手,正在阅读 Sublime Text 插件的一些代码,遇到了一些我不熟悉的代码。
views = [v for v in sublime.active_window().views()]
这是我不明白的“[v for v”部分。这段代码到底在做什么?
提前致谢!
这是一个列表理解。它等效于(但比):
views = []
for v in sublime.active_window().views():
views.append(v)
请注意,在这种情况下,他们应该刚刚使用list
:
views = list(sublime.active_window().views())
在 python2.7 中还引入了其他类型的推导:
集合理解:
{x for x in iterable}
和听写理解:
{k:v for k,v in iterable_that_yields_2_tuples}
因此,这是创建所有值为 1 的字典的低效方法:
{k:1 for k in ("foo","bar","baz")}
最后,python 还支持生成器表达式(它们至少在 python2.6 中可用——我不确定它们是什么时候引入的):
(x for x in iterable)
这类似于列表推导式,但它返回一个可迭代对象。在您实际迭代它们之前,生成器并不是特别有用。优点是生成器会即时计算值(而不是将值存储在列表中,然后您可以稍后对其进行迭代)。它们的内存效率更高,但在某些情况下它们的执行速度比 list-comps 慢 - 在其他情况下,它们比 list-comprehensions 更出色,因为它很容易说 - 请给我前 3 个元素 - 而使用列表理解,您必须预先计算所有元素,这有时是一个昂贵的过程。
这是一个列表理解。它有点像带有内联 for 循环的表达式,用于动态创建快速列表。在这种情况下,它正在创建由sublime.active_window().views()
.
当您需要转换每个值时,列表推导式真的很出色。例如,这里有一个快速的列表理解来获得前十个完美的正方形:
[x*x for x in range(1,11)]