2016-04-21 60 views
-2
>>> print "-".join(chr(2)*5)  
'\x02-\x02-\x02-\x02-\x02'  
>>> print "-".join(chr(2) for _ in xrange(5)) 
'\x02-\x02-\x02-\x02-\x02' 

兩者的區別是什麼?str.join的功能使用案例

我不明白的"-".join(chr(2) for _ in xrange(5))

回答

2

join函數的定義看出來:

str.join(iterable) 

Return a string which is the concatenation of the strings in the iterable iterable. 

在你的迭代是chr(2)其重複5次尚屬首例。 在第二種情況下可迭代是

chr(2) for _ in xrange(5) 

其中xrange(5)膨脹到序列(0, 1, 2, 3, 4), 和_是任意變量(它可能是ix或其他任何東西)。

所以,在這兩種情況下你都有chr(2)重複5次。

1

str.join執行順序需要一個迭代,這既chr(2)*5chr(2) for _ in xrange(5)是。

你可以這樣做

>>> list(chr(2) for _ in xrange(5)) == list(chr(2) * 5) 
True 
2

在第一個示例中,重複該字符串5次並使用短劃線作爲分隔符進行連接。正如你可以看到chr(2)*5返回一個字符串。

>>> type(chr(2)*5) 
<type 'str'> 

第二個示例使用相同的分隔符連接生成器。

>>> type(chr(2) for _ in xrange(5)) 
<type 'generator'> 

而且字符串和發電機的iterablestr.join返回字符串的連接兩個實例。

>>> from collections import Iterable 
>>> isinstance(chr(2)*5, Iterable) 
True 
>>> isinstance((chr(2) for _ in xrange(5)), Iterable) 
True