【问题标题】:porting the piece of code移植一段代码
【发布时间】:2011-01-31 08:27:36
【问题描述】:

我有以下代码:

code1

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

code2

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

结果:

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

现在,在某些情况下(如果我是正确的),默认分隔值“sep”的值与“”不同。我真的很想知道这种情况什么时候发生?

我有以下疑问:

  1. 以上两个代码有什么区别吗,更具体的在'join' python2.x情况下的声明。

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

提前谢谢..

【问题讨论】:

  • 当你运行这两者并比较结果时,你看到了什么?请用您实际观察到的差异更新问题。

标签: python porting


【解决方案1】:

我必须查一下——string 的大部分内容已过时(由真实str 对象上的真实方法替换);因此,即使在 Python 2 中,您也应该适当地使用 ' '.join。但不,没有什么不同 - string.join 默认使用单个空格连接(即 ' '.join 是等效的)。

【讨论】:

    【解决方案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)
    

    最后,高级选项是使用未绑定的方法。例如

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

    其中任何一个都可以,只需选择您认为最适合阅读的任何一个即可。

    【讨论】:

      【解决方案3】:

      这两个语句是等价的。

      string.join(words[, sep])  
      

      连接单词列表或元组 中间发生了 sep。 sep 的默认值是单个 空格字符。

      而对于第二种情况:

      str.join(iterable)    
      

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

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

      来源:

      【讨论】:

        【解决方案4】:

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

        如果你想传递一个列表或一个元组,这两个变量是相等的。在python3中只有第二个变种存在afaik

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-08
          • 2015-08-20
          • 2011-08-30
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多