2016-06-10 154 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