body {
height:100%;
display:block;
position:relative;
}
两者有什么区别?
我不理解>>> print "-".join(chr(2)*5)
'\x02-\x02-\x02-\x02-\x02'
>>> print "-".join(chr(2) for _ in xrange(5))
'\x02-\x02-\x02-\x02-\x02'
答案 0 :(得分:2)
str.join
采用可迭代,chr(2)*5
和chr(2) for _ in xrange(5)
都是。
你可以通过这样做看到它
>>> list(chr(2) for _ in xrange(5)) == list(chr(2) * 5)
True
答案 1 :(得分:2)
从join
函数的定义:
str.join(iterable)
Return a string which is the concatenation of the strings in the iterable iterable.
在第一种情况下,您的iterable是chr(2)
,重复5次。
在第二种情况下,iterable是
chr(2) for _ in xrange(5)
其中xrange(5)
扩展为序列(0, 1, 2, 3, 4)
,
_
是一个任意变量(可能是i
,x
或其他任何变量。
因此,在这两种情况下,您chr(2)
重复了5次。
答案 2 :(得分:2)
在第一个示例中,重复字符串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