2014-01-17 56 views
1

我很難理解這個循環。我是新的python,所以我不明白到底發生了什麼。該代碼是爲html轉義。Python for循環與它的元組

我的問題是:如何執行for循環?爲什麼對(i,o)在(.........)中這是如此的真實?它如何知道字符串s中有一個&符號?

def escape_html(s): 
    for(i,o) in (("&", "&amp;"),(">","&gt;"),('<','&lt;'),('"',"&quot;")): 
    s=s.replace(i,o) 
return s 



print escape_html("hello&> this is do\"ge") 

回答

2

首先你需要了解元組解包。

(a, b) = ("foo", 1) 

此表達式分配"foo"a1b。在循環內部可以使用相同的語法來解開正在循環的迭代器對象的元素。

因此,對於您的循環的每個元素,您將解包嵌套元組(這是可迭代的)的元素。

def escape_html(s): 
    for (i,o) in (("&", "&amp;"),(">","&gt;"),('<','&lt;'),('"',"&quot;")): 
    s = s.replace(i,o) 
    return s 

解開循環爲您提供了這樣的事情:

def escape_html(s): 
    s = s.replace("&", "&amp;") 
    s = s.replace(">","&gt;") 
    s = s.replace('<','&lt;') 
    s = s.replace('"',"&quot;") 
    return s 
1

這有幫助嗎?

>>> for(i,o) in (("&", "&amp;"),(">","&gt;"),('<','&lt;'),('"',"&quot;")): 
...  print "i: {}, o: {}".format(i,o) 
... 
i: &, o: &amp; 
i: >, o: &gt; 
i: <, o: &lt; 
i: ", o: &quot; 

在循環的每次迭代過程中,挑選迭代器的一個元素;所以對於第一次迭代,該元素是元組("&", "&amp;")。然後將該元組解壓縮到變量io中。

1

語法

for x, y in z: 

手段「解包在可迭代z成兩個變量xyfor循環的每次迭代的2元組」。

這不一定是True;你想一個while循環:

while True: 

這是專爲迭代,直到某些條件得到滿足,而for循環是通過一個迭代的項目工作。

而且它不會知道,任何在對第一個字符將在參數s,但replace如果不是不會引發錯誤。