移植这段代码

时间:2011-01-31 08:27:37

标签: python porting

我有以下代码:

CODE1

lis = ["a", "s", "d"]
string.join(lis)

码2

lis = ["a", "s", "d"]
' '.join(lis)

结果:

对于这两种情况,结果都是'a s d'

现在,当默认分离值'sep'的值与''不同时,应该存在某些情况(如果我是正确的话)。我真的想知道这种情况何时发生?

我有以下怀疑:

  1. 上述两个代码之间是否有任何区别,更具体地说是“加入” python2.x的语句。

  2. 如果'是',那么如何在python3.x中执行'code1'的任务,因为在python3.x字符串中没有模块'join'

  3. 提前感谢..

4 个答案:

答案 0 :(得分:2)

我必须查找它 - string的大部分已过时(由真实str对象上的实际方法取代);因此,即使在Python 2中也应该使用' '.join。但是,不存在 - string.join默认连接单个空格(即' '.join等效)。

答案 1 :(得分:2)

没有显着差异。在你可以使用第一个表单的所有情况下,第二个表单都可以工作,第二个表单将继续在Python 3上运行。

但是,有些人发现在文字字符串上编写方法调用看起来很刺耳,如果你是其中之一,那么还有一些其他选项需要考虑:

' '.join(iterable) # Maybe looks a bit odd or unfamiliar?

您可以使用名称而不是文字字符串:

SPACE = ' '
...
SPACE.join(iterable) # Perhaps a bit more legible?

或者你可以用类似于string.join()的方式编写它,但要注意参数是相反的:

str.join(' ', iterable)

最后,高级选项是使用未绑定的方法。 e.g。

concatenate_lines = '\n'.join
...
print(concatenate_lines(iterable))

任何这些都可行,只需选择您认为最佳的选项。

答案 2 :(得分:1)

这两个陈述是等价的。

string.join(words[, sep])  
     

连接单词列表或元组   干预发生的sep。   sep的默认值是单个   空间角色。

对于第二种情况:

str.join(iterable)    
     

返回一个串联的字符串   可迭代迭代中的字符串。   元素之间的分隔符是   提供此方法的字符串。

由于第二个版本仍然存在于Python 3中,因此您可以毫无问题地使用该版本。

来源:

答案 3 :(得分:0)

string.join接受列表或元组作为参数,wheras“”.join接受任何可迭代的。

如果要传递列表或元组,则两个变量相等。在python3中,只有第二个变体存在于afaik