2016-04-21 37 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