>>> 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))
>>> 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))
从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)
, 和_
是任意变量(它可能是i
,x
或其他任何东西)。
所以,在这两种情况下你都有chr(2)
重复5次。
str.join
执行顺序需要一个迭代,这既chr(2)*5
和chr(2) for _ in xrange(5)
是。
你可以这样做
>>> list(chr(2) for _ in xrange(5)) == list(chr(2) * 5)
True
在第一个示例中,重复该字符串5次并使用短划线作为分隔符进行连接。正如你可以看到chr(2)*5
返回一个字符串。
>>> type(chr(2)*5)
<type 'str'>
第二个示例使用相同的分隔符连接生成器。
>>> type(chr(2) for _ in xrange(5))
<type 'generator'>
而且字符串和发电机的iterable和str.join
返回字符串的连接两个实例。
>>> from collections import Iterable
>>> isinstance(chr(2)*5, Iterable)
True
>>> isinstance((chr(2) for _ in xrange(5)), Iterable)
True