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

2 投票
3 回答
1636 浏览
提问于 2025-04-15 13:18

我在不同的环境中执行Python脚本时遇到了问题,因为不同版本的解释器处理文本格式的方式不一样。

在Python 2.6之前,格式化文本是这样做的:

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

而在Python 2.6及之后的版本中,最好的做法是

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

但是,如果你想让这个脚本在任何Python版本中都能运行呢?是写Python 2.6之前的代码来确保兼容性更好,还是使用Python 2.6及之后的代码,这样在未来也能使用呢?

有没有其他方法可以编写代码,既能适应当前的Python版本,又不失去对旧版本的兼容性呢?

谢谢

3 个回答

0

你可以看看 string.Template (3.1版本的链接) 这种格式化字符串的方法,这个接口在所有2.5及以上的版本中都是稳定的。我觉得用拼接字符串是一个简单的方法,可以在旧版和新版的Python中都能用。虽然这种方法明显比较慢、代码比较长,而且没有其他方法那么符合Python的风格。

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])
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()。如果你的目标是 Python 3.0 之前的版本,就使用 % 格式化。

撰写回答