函数用例str.join

时间:2016-04-21 16:06:55

标签: python python-2.7

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'

的执行顺序

3 个答案:

答案 0 :(得分:2)

str.join采用可迭代,chr(2)*5chr(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)_是一个任意变量(可能是ix或其他任何变量。

因此,在这两种情况下,您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