>>> 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