不同版本的Python中的文本格式

时间:2009-07-31 11:48:35

标签: python formatting

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

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

n = 3
print "%s * %s = %s" % (n, n, n*n)

而在python> = 2.6中,best way to do it是:

n = 3
print "{0} * {0} = {1}".format(n, n*n)

但是当你想在任何python版本中运行脚本时呢? 更好的是,编写python< 2.6代码以确保即时兼容性或使用python> = 2.6代码,这将是它将来使用的方式?

是否还有其他选项可以为实际的python版本编写代码而不会失去与olders的兼容性?

由于

3 个答案:

答案 0 :(得分:3)

str.format()是在Python 2.6中引入的,但它只是Python 3.0中首选的字符串格式化方法。

在Python 2.6中,两种方法当然都可以使用。

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

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

总而言之,如果您的目标是Python 3.0,请使用str.format()。如果您的目标是Pyhon< 3.0,请使用%格式。

答案 1 :(得分:1)

好的旧元组或字符串连接怎么样?

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])

答案 2 :(得分:0)

您应该查看格式化字符串的string.Template (link for 3.1)方式,API在所有版本中都是稳定的> = 2.5。 我认为连接是实现新旧Python版本的可移植性的简单方法。显然,它比其他选择更慢,更冗长,更少pythonic。