Fal*_*rri 23 python string-concatenation
我意识到,如果你有一个可迭代的,你应该总是使用.join(iterable)而不是for x in y: str += x.但是,如果只有固定数量的变量尚未在迭代中,.join()仍然使用推荐的方式?
比如我有
user = 'username'
host = 'host'
Run Code Online (Sandbox Code Playgroud)
我该怎么做
ret = user + '@' + host
Run Code Online (Sandbox Code Playgroud)
要么
ret = '@'.join([user, host])
Run Code Online (Sandbox Code Playgroud)
从性能的角度来看,我并没有那么多问,因为两者都是非常微不足道的.但我读到这里的人说总是使用.join(),我想知道是否有任何特殊原因,或者它通常是一个好主意使用.join().
Tho*_*ers 29
如果您正在创建类似的字符串,通常需要使用字符串格式:
>>> user = 'username'
>>> host = 'host'
>>> '%s@%s' % (user, host)
'username@host'
Run Code Online (Sandbox Code Playgroud)
Python 2.6添加了另一种形式,它不依赖于运算符重载并具有一些额外的功能:
>>> '{0}@{1}'.format(user, host)
'username@host'
Run Code Online (Sandbox Code Playgroud)
作为一般准则,大多数人+只有在字符串中添加两个字符串时才会使用字符串.对于更多部分或更复杂的字符串,它们要么使用字符串格式,如上所述,要么在列表中组合元素并将它们连接在一起(特别是如果涉及任何形式的循环.)使用的原因str.join()是将字符串添加在一起意味着创建一个每个添加的新字符串(可能会破坏旧的字符串).Python有时可以优化它,但str.join()很快就会变得更清晰,更明显,更快.
Nic*_*ins 14
我接受这个问题的意思是:"这样做可以:"
ret = user + '@' + host
Run Code Online (Sandbox Code Playgroud)
..答案是肯定的.那很好.
当然,你应该知道你可以用Python做的很酷的格式化东西,你应该知道,对于长列表,"加入"是要走的路,但对于像这样的简单情况,你所拥有的是非常正确.它简单明了,性能不会成为问题.
(我很确定所有指向字符串格式的人都完全错过了这个问题.)
通过构造数组并加入它来创建字符串仅出于性能原因.除非你需要这种性能,或者除非它恰好是实现它的自然方式,否则这样做没有任何好处,而不是简单的字符串连接.
说'@'.join([user, host])是不直观的.这让我很奇怪:他为什么要这样做?它有什么微妙之处; 有没有可能有多个'@'的情况?当然,答案是否定的,但是得出这个结论需要花费更多的时间,而不是以自然的方式写出来.
不要仅仅为了避免字符串连接而扭曲代码; 它没有任何内在错误.加入数组只是一种优化.
我只是注意到,我一直倾向于使用就地连接,直到我重新阅读Python一般风格的PEP PEP-8 Python代码样式指南的一部分.
- 代码应该以不影响Python的其他实现(PyPy,Jython,IronPython,Pyrex,Psyco等)的方式编写.例如,不要依赖CPython为a + = b或a = a + b形式的语句高效实现就地字符串连接.这些语句在Jython中运行得更慢.在库的性能敏感部分,应该使用'.join()形式.这将确保在各种实现中以线性时间进行连接.
顺便说一句,我一直在转向使用连接的做法,这样当效率更加关键时,我可以将这种习惯保留为更自动的习惯.
所以我会投票支持:
ret = '@'.join([user, host])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38788 次 |
| 最近记录: |