2016-06-10 206 views
1

我是新來的Python訪問之前,我試圖瞭解以下行:的Python循環控制變量聲明

"".join(char for char in input if not unicodedata.category(char).startswith('P')) 

來源:https://stackoverflow.com/a/11066443/3818487

此代碼刪除所有Unicode標點符號從輸入。我不明白它爲什麼有效。據我所知,它只是迭代輸入中的所有字符而忽略標點符號。它在for循環中聲明之前如何訪問char?我來自java背景,所以這對我來說非常混亂。

+3

你可以在python中閱讀'List Comprehension'。這就是在這裏所做的。 – Bharat

+0

如何「刪除所有unicode標點」與「遍歷輸入中的所有字符忽略標點字符」不同?那些對我來說看起來是同樣的最終結果。 –

+0

爲什麼你在這裏更改'input'的鏈接答案中的標識符'word'? 'input()'是一個內置函數,不應該像這樣被掩碼。 – MattDMo

回答

2

在常規代碼中(使用列表來存儲我們的非標點符號),這種理解看上去更像以下內容。

#input is defined somewhere prior to the loop 
output = [] 
for char in input: 
    if not unicodedata.category(char).startswith('P'): 
     output.append(char) 
''.join(output) 

理解首先迭代循環部分,並在左邊迭代該值。

+0

啊,所以左邊的char只是存儲迭代結果的簡寫。 – alexgbelov

+0

沒有太多的存儲結果,但迭代填充的變量(就像我的例子中的'char')。那有意義嗎?編輯:或者你的意思是「結果」在這個意義上? –

+0

那麼,char既充當單個字符,又充當迭代的所有字符的列表? – alexgbelov