Python序列语法

dhe*_*n79 1 python plugins sequences sublimetext2

我是python的新手,正在阅读Sublime Text插件的一些代码,并且遇到了一些我不熟悉的代码.

views = [v for v in sublime.active_window().views()]
Run Code Online (Sandbox Code Playgroud)

它是"[v for v"部分,我不明白.这段代码在做什么呢?

提前致谢!

mgi*_*son 9

这是列表理解.它相当于(但效率更高):

views = []
for v in sublime.active_window().views():
    views.append(v)
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,他们应该刚刚使用list:

views = list(sublime.active_window().views())
Run Code Online (Sandbox Code Playgroud)

python2.7中引入了其他类型的理解:

理解:

{x for x in iterable}
Run Code Online (Sandbox Code Playgroud)

和dict理解:

{k:v for k,v in iterable_that_yields_2_tuples}
Run Code Online (Sandbox Code Playgroud)

因此,这是一种创建字典的低效方法,其中所有值都是1:

{k:1 for k in ("foo","bar","baz")}
Run Code Online (Sandbox Code Playgroud)

最后,python还支持生成器表达式(它们至少在python2.6中可用 - 我不确定它们何时被引入):

(x for x in iterable)
Run Code Online (Sandbox Code Playgroud)

这类似于列表推导,但它返回一个可迭代对象.在你实际迭代它们之前,生成器并不是特别有用.优点是生成器可以动态计算值(而不是将值存储在列表中,然后可以在以后迭代).它们的内存效率更高,但在某些情况下它们的执行速度比list-comps慢 - 在其他情况下,它们比列表理解更胜一筹,因为它很容易说 - 请给我前3个元素 - 而列表理解,你必须预先计算所有元素,这有时是一个昂贵的程序.