2017-11-04 55 views
1

我是Python新手。我試圖理解這個語法,但我甚至能找到正確的參考,因爲我不知道有什麼不同的語義元素的意思是:Python語句的含義用冒號和行尾

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

現在,這並不在我的Python工作安裝(V2.4)。它說「SyntaxError:無效的語法」

有人可以解釋什麼是分配給LHS,並正確的方式來重寫Python 2.4的語句?什麼是「for」循環在循環結束時被提及?

順便說一下,原來的代碼是從這裏:vcd_parse

+1

爲什麼你2.4?如果可能的話,你應該升級。 – user2357112

+0

@ user2357112因爲我不是那個在我們公司的系統上安裝它的人:(有沒有一種方法可以在我的主目錄中安裝非管理版本的python? –

+2

實際上,您可以有多種方式可以做到這一點,這取決於你想用Python來做什麼,你在做什麼操作系統,以及你從源代碼編譯東西的感覺如何。你可以[下載Python 3.6.3](https://www.python.org/downloads/release/python-363 /),或者獲取[Anaconda](https://www.anaconda.com/download/)或其他發行版 – user2357112

回答

3

正如其他人所說,這是一本字典的理解,這是不是在Python 2可用,直到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

[Genexps are in 2.4。](http://legacy.python.org/dev/peps/pep-0289/) – user2357112

+0

[其他參考。](https://docs.python.org/2/whatsnew/2.4的.html#PEP-289發電機表達式) – user2357112

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), 
         ...} 
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) 
+0

好的。在Python 2.4中的等效工作。但後來還有很多其他錯誤。猜猜語法錯誤是由於較舊的Python版本? –

+0

@SujayPhadke它應該。 – gommb

0

self.senstive是一個對象的屬性,它是XMR的列表(S)。

現在,代碼編寫器想要創建一個字典,其中的鍵爲xmr(s)和xmr(s)的id值。

他這樣做的方式叫做字典理解。

末輸出字典看起來像下面

{xmr_1 : xmr_id_1, xmr_2 : xmr_id_2,.....so on} 
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)