不同版本Python中的文本格式

不同版本Python中的文本格式,python,formatting,Python,Formatting,我在使用不同版本的解释器在不同环境中执行python脚本时遇到了一个问题,因为不同版本的文本格式不同 在python=2.6中: 但是,当您希望在任何python版本中运行脚本时,情况又如何呢? 编写python=2.6代码,这将是它在未来的使用方式,还有什么更好的呢 有没有其他选项可以为实际的python版本编写代码而不失去与旧版本的兼容性 感谢您,Python 2.6中引入了str.format(),但它只成为Python 3.0中字符串格式化的首选方法 当然,在Python2.6中,这两种

我在使用不同版本的解释器在不同环境中执行python脚本时遇到了一个问题,因为不同版本的文本格式不同

在python<2.6中,它是这样做的:

n = 3
print "%s * %s = %s" % (n, n, n*n)
而在python>=2.6中:

但是,当您希望在任何python版本中运行脚本时,情况又如何呢? 编写python=2.6代码,这将是它在未来的使用方式,还有什么更好的呢

有没有其他选项可以为实际的python版本编写代码而不失去与旧版本的兼容性

感谢您,Python 2.6中引入了str.format(),但它只成为Python 3.0中字符串格式化的首选方法

当然,在Python2.6中,这两种方法仍然有效

这完全取决于代码的使用者是谁。如果您希望大多数用户不会使用Python 3.0,那么请坚持使用旧的格式

但是,如果您的项目需要Python 3.0中的某些必备功能,那么要求用户使用特定版本的解释器并非不合理。请记住,Python 3.0破坏了一些3.0之前的代码


总之,如果您的目标是Python 3.0,请使用str.format()。如果您的目标是Pyhon那么好的元组或字符串连接呢

print n, "*", n, "=", n*n
#or
print str(n) + " * " + str(n) + " = " + str(n*n)
它没有那么花哨,但在任何版本中都应该有效

如果太冗长,也许可以使用自定义函数:

def format(fmt, values, sep="%%"):
   return "".join(str(j) for i in zip(fmt.split(sep), values) for j in i)

#usage
format("%% * %% = %%", [n, n, n*n])

您应该看看格式化字符串的方法,API在>=2.5的所有版本中都是稳定的。
我认为连接是实现新旧Python版本可移植性的简单方法。显然,它比其他方法慢、冗长,而且不太像Python。

考虑到他使用print作为语句,他可能针对的是Python<3,所以坚持使用百分比运算符应该没问题。是的,您是对的,在Python 3中,您需要使用print()函数。第二个代码打算在Python 2.6中使用,如果我想将代码移植到Python3,使用2to3工具将很容易。主要问题是文本格式。。。但是我想我会使用python,我有兴趣在一些特别的测试中发现,当我选择使用新的闪亮的“string.format()方式”时,我在python 2.6中的速度会下降。人们想知道为什么Py3的采用速度如此缓慢。Python2.5实际上比2.6和2.5更快地运行我的许多代码。YMMV.是的,这是一个选项,但当将文本作为一个函数参数传递并替换3或4个变量时,它会非常难看……字符串连接的一个问题是,它使本地化变得非常困难。如果您想翻译成另一种语言,第一个问题是变量的自然顺序可能不同,第二个问题是,它引入了更多的字符串进行翻译,这更困难,因为您只有字符串片段。翻译人员不会看到每个字符串是如何使用的,只会看到本地化文件中的片段。如果你期望他们阅读原文来推断它应该如何翻译,你会有反抗!
def format(fmt, values, sep="%%"):
   return "".join(str(j) for i in zip(fmt.split(sep), values) for j in i)

#usage
format("%% * %% = %%", [n, n, n*n])