her*_*ity 12 python string-formatting python-2.7 python-3.x
为什么下面的代码在'Snakes and Coffee'的评论中被称为'古老的不赞成的方法'到Blender 在python中打印多个参数的帖子?它与Python 2或Python 3的后端代码/实现有关吗?
print("Total score for " + str(name) + " is " + str(score))
Run Code Online (Sandbox Code Playgroud)
MSe*_*ert 14
添加许多字符串不被批准,因为:
str它们.而且,是的,它真的很老了.:-)
理论上,字符串添加会创建一个新字符串 所以,假设您添加了n字符串,那么您需要创建n-1字符串,但除了一个之外的所有字符串都会被丢弃,因为您只对最终结果感兴趣.字符串是作为数组实现的,因此您可以进行大量潜在的昂贵(重新)分配而无需获益.
如果你有一个带占位符的字符串,它不仅更具可读性(你没有这些+和str它们之间),但是python还可以计算最终字符串的长度,并为最终字符串分配一个数组并插入所有内容.
在实践中,这并不是真正发生的事情,因为Python检查字符串是否是中间件并进行一些优化.所以它没有创建n-2不必要的数组那么糟糕.
对于小字符串和/或交互式使用,您甚至不会注意到差异.但其他方式则具有更易读的优势.
替代品可能是(前两个是从@MKemps回复的):
"Total score for {} is {}".format(name, score)"Total score for %s is %s" % (name, score) (也老了!)"Total score for {name} is {score}".format(name=name, score=score)f"Total score for {name} is {score}" (非常新 - 在Python 3.6中引入)特别是后两个例子表明你甚至可以读取模板字符串而无需插入任何东西.
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |