Python序列语法

2024-04-19 10:49:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,在阅读一个高级文本插件的一些代码时遇到了一些我不熟悉的代码。你知道吗

views = [v for v in sublime.active_window().views()]

这是我不明白的“[v对v”部分。这段代码到底在干什么?你知道吗

提前谢谢!你知道吗


Tags: 代码in文本插件forwindowviewsactive
2条回答

那是一份清单。相当于(但效率高于):

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)

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

这是一个list comprehension。这有点像带有内联for循环的表达式,用于动态创建快速列表。在本例中,它创建了sublime.active_window().views()返回的列表的浅层副本。你知道吗

当你需要转换每一个值时,列表理解真的很有用。例如,下面是获得前十个完美正方形的快速列表:

[x*x for x in range(1,11)]

相关问题 更多 >