我是python的新手,正在阅读Sublime Text插件的一些代码,并且遇到了一些我不熟悉的代码。
views = [v for v in sublime.active_window().views()]
它是“[v for v”部分,我不明白。这段代码在做什么呢?
提前致谢!
答案 0 :(得分:9)
这是列表理解。它相当于(但效率更高):
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}
和dict理解:
{k:v for k,v in iterable_that_yields_2_tuples}
因此,这是一种创建字典的低效方法,其中所有值都是1:
{k:1 for k in ("foo","bar","baz")}
最后,python还支持generator expressions(它们至少在python2.6中可用 - 我不确定它们何时被引入):
(x for x in iterable)
这类似于列表推导,但它返回一个可迭代对象。在你实际迭代它们之前,生成器并不是特别有用。优点是生成器可以动态计算值(而不是将值存储在列表中,然后可以在以后迭代)。它们的内存效率更高,但在某些情况下它们的执行速度比list-comps慢 - 在其他情况下,它们比列表理解更胜一筹,因为它很容易说 - 请给我前3个元素 - 而列表理解,你必须预先计算所有元素,这有时是一个昂贵的程序。
答案 1 :(得分:4)
这是list comprehension。它有点像带有内联循环的表达式,用于动态创建快速列表。在这种情况下,它正在创建sublime.active_window().views()
返回的列表的浅表副本。
当您需要转换每个值时,列表推导真的很闪耀。例如,这是一个快速列表理解,以获得前十个完美的正方形:
[x*x for x in range(1,11)]