字符串格式表达式(Python)

3zz*_*zzy 5 python string printf deprecated

String格式表达式:

'This is %d %s example!' % (1, 'nice')
Run Code Online (Sandbox Code Playgroud)

字符串格式化方法调用

'This is {0} {1} example!'.format(1, 'nice')
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢方法调用(第二个例子)的可读性,但由于它是新的,因此有可能随着时间的推移,这些中的一个或另一个可能会被弃用.您认为哪个不太可能被弃用?

Aar*_*lla 8

无论; 第一个用于很多地方,第二个用于刚刚介绍.所以问题是你更喜欢哪种风格.我实际上更喜欢dict基于格式:

d = { 'count': 1, 'txt': 'nice' }
'This is %(count)d %(txt)s example!' % d
Run Code Online (Sandbox Code Playgroud)

它确保正确的参数进入正确的位置,允许在几个地方重用相同的参数,等等.

  • +1基于dict的方法.这也可以与locals()和globals()一起使用来定义字典! (5认同)
  • 可以使用format()函数模拟基于dict的方法,方法是将``**d``传递给format(),然后使用{}. (2认同)

Ada*_*eal 6

我以为我已经读过%3.1中已经弃用了运算符,所以我坚持使用该format()函数.

请参阅PEP 3101:字符串格式的新方法

  • 我只知道页面上说了什么:它将在3.1中被弃用并在以后删除...不要拍摄信使:) (2认同)

art*_*nil 5

最初的想法是逐步切换到str.format()方法,同时允许两种方式:

PEP 3101:
新系统不会与现有字符串格式化技术的任何方法名称冲突,因此两个系统可以共存,直到弃用旧系统为止.

这个想法仍在继续:

我们仍然鼓励人们使用新的str.format(). Python Issue 7343

由于原来的'%'方法计划在将来的某个时候被弃用和删除,我建议用str.format()编写新代码.虽然目前只是个人偏好的问题.我个人更喜欢使用基于字典的格式,'%'运算符和str.format()方法都支持这种格式.