我在使用不同版本的解释器的不同环境中执行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的兼容性?
由于
答案 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。