Skip to main content
 首页 » 编程设计

Python 序列语法

2025年05月04日9zhengyun_ustc

我是 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也支持generator expressions (它们至少在 python2.6 中可用——我不确定它们是何时引入的):

(x for x in iterable) 

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