2013-05-20 88 views
1

修改屬性,如果我有一個簡單的類通過列表理解

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 

任何理解爲什麼列表理解失敗在這裏?

回答

5

列表理解是建立清單方面。理解遍歷一個迭代並評估一個表達式 - 它將表達式的結果追加到正在構建的列表中。

這顯然不是語句的工作 - 他們怎麼來評價?他們會返回什麼價值? Python因此無法建立列表,並且它是一個SyntaxError。這也適用於三元運算符之類的東西。

當你不需要建立一個列表,或當您要執行通過列表迭代操作,使用for循環。

+0

感謝calrifying – chrise

3

這是因爲列表解析並不意味着突變,它不考慮Python的,如果你想變異列表中理解的東西,使用for循環在Python,而不是

+0

謝謝。 LC似乎是單線循環的方式。不知道有沒有理由限制它們的功能 – chrise

+1

有一個原因,這個共振不是被稱爲「pythonic」,而是「函數式編程」,具體來說就是:「參考透明性」。 – Paul

+0

@ user1734278的Python促進編碼的某種風格,如果你想沒有限制去Perl的,但它是不是很漂亮有IMO – jamylak