通过列表理解修改属性

时间:2013-05-20 11:29:07

标签: python

如果我有一个简单的课程

class test(object):
    def __init__(self):
        self.prop=False

为什么这不起作用

l=[a,b,c]
[c.prop=True for c in l]

for c in l:
    print c.prop

它显示无效的symtax​​。但常规循环工作

for c in l:
     c.prop=True

知道为什么列表理解在这里失败了吗?

2 个答案:

答案 0 :(得分:5)

Python中的列表推导用于构建列表。理解循环遍历一个iterable并计算一个表达式 - 它将表达式的结果附加到它正在构建的列表中。

这显然不适用于陈述 - 他们评价什么?他们会回报什么价值?因此,Python无法构建列表,它是SyntaxError。这也适用于三元运算符之类的东西。

如果您不需要构建列表,或者想要执行迭代列表的操作,请使用for循环。

答案 1 :(得分:3)

这是因为列表推导不适用于突变,它不被认为是Pythonic,如果你想在列表推导中改变某些东西,请改用for循环