带有冒号的Python语句的含义以及行尾的含义

时间:2017-11-04 05:40:00

标签: python

我是Python新手。我试图理解这种语法,但由于我不知道各种语义元素的含义,我甚至无法找到正确的引用:

self._sensitive_ids = {xmr : self.parser.get_id(xmr) for xmr in self.sensitive}

现在这在我的python安装(V2.4)中不起作用。它说"语法错误:语法无效"

有人可以解释分配给LHS的内容,以及重写Python 2.4语句的正确方法吗?什么是" for"当它在行尾提到时,循环在这里循环?

顺便说一下,原始代码来自:vcd_parse

5 个答案:

答案 0 :(得分:3)

正如其他人所说,这是一本词典理解,在2.7版本中不可用,直到版本2.7。

在Python 2.5及更高版本中,您可以在dict构造函数中使用生成器表达式:

self._sensitive_ids = dict((xmr, self.parser.get_id(xmr)) for xmr in self.sensitive)

在Python 2.4中,您可以在dict构造函数中使用列表推导:

self._sensitive_ids = dict([(xmr, self.parser.get_id(xmr)) for xmr in self.sensitive])

实际上,你可以也在Python 2.4中使用生成器表达式版本。我有点朦胧,因为我使用了2,4,所以有一段时间。 ;)

您可以在the official tutorial中阅读有关列表推导的内容。

答案 1 :(得分:1)

self._sensitive_ids = {xmr : self.parser.get_id(xmr) for xmr in self.sensitive}

相当于:

self._sensitive_ids = {}
for xmr in self.sensitive:
    self._sensitive_ids[xmr] = self.parser.get_id(xmr)

答案 2 :(得分:1)

这是一种pythonic行定义循环内部列表的方法。以下代码相同:

# normal way
sample_list = [1,2,10,12]
pythonic_list = []
for i in sample_list:
    pythonic_list.append(i*2)



# pythonic way
sample_list = [1,2,10,12]
pythonic_list = [i*2 for i in sample_list]

在你的情况下:

self._sensitive_ids = {xmr : self.parser.get_id(xmr) for xmr in self.sensitive}

与:

相同
self._sensitive_ids = {}
for xmr in self.sensitive:
    self._sensitive_ids[xmr] = self.parser.get_id(xmr)

答案 3 :(得分:0)

字典理解将xmr键映射到self.parser.get_id(xmr)值;它从每个(key, value)对构建字典:
(xmrself.parser.get_id(xmr))

self._sensitive_ids = {xmr1 : self.parser.get_id(xmr1),  # for each xmr in self.sensitive, maps the corresponding parser value
                       xmr2 : self.parser.get_id(xmr2),
                       ...}

答案 4 :(得分:0)

self.senstive是对象的属性,它是xmr(s)的列表。

现在代码编写者想要创建一个字典,其中键为xmr(s),xmr(s)的id(s)值。

他这样做的方式被称为字典理解。

结束输出字典如下所示

{xmr_1 : xmr_id_1, xmr_2 : xmr_id_2,.....so on}