Python格式化最佳实践

7

我刚开始学习Python,关于使用.format格式化字符串的最佳实践(或至少是常见实践),有一个问题需要问一下。

我的问题主要是关于何时使用空括号、索引号和名称。

例如,如果您有一个单独的变量想要包含在字符串中,您会选择哪个?

print "I {} Stack Overflow".format(var)
print "I {0} Stack Overflow".format(var)
print "I {verb} Stack Overflow".format(verb = var)

如果您想包含多个变量,是否需要进行更改呢?也许对于单个变量来说包含{}是可以的,但是对于多个变量来说就不行了吗?
如果您有任何想法或见解,将不胜感激。
谢谢!

我不确定pep8是怎么说的...但是我不喜欢空括号...而且我最喜欢的是method3...但这可能只是我的个人偏好 - Joran Beasley
根据手头任务的可读性,我倾向于使用 {}{word} - Simeon Visser
这个,我的朋友,取决于你的喜好。 :) - Niyojan
4个回答

7

我认为目前还没有任何被确定为“最佳”或甚至是“常见”的实践,所以你会得到一堆不同的意见(包括我的:-)。

当你的格式字符串是一个变量(例如从数据库或配置文件中获取,根据用户选择的语言进行选择等等)时,我认为使用{named}花括号是最好的选择,因为它们让你可以选择格式化哪些(命名的)参数,顺序,可能重复它们等等,同时保持可读性。

如果格式字符串是一个字面值,那么空花括号{}是最不显眼的,因此可能是最易读的 - 除非你的格式字符串有“太多”这样的花括号,这当然是一个风格判断。

至少这是一个与每次定义或调用函数时面临的风格问题非常相关的问题 - 任何定位参数或参数对于可读性来说都“太多”,你是否应该完全采用只有命名参数和参数的方式等等。类似的考虑也适用!


"{:{}{}d}".format(2,0,3) 只有 3 个冒号 :P (我想我把参数顺序搞对了...) - Joran Beasley
1
@JoranBeasley,我同意这个暗示,即当相对较少的匿名条目以不熟悉的方式“嵌套”时,可读性也可能会受到影响。值得注意的是,向格式化字符串添加参数编号也不会有助于可读性 - 只有两侧都带有名称才能帮助。 - Alex Martelli
@AlexMartelli 嗯,我稍微有点不同意...至少使用数字索引,我可以知道哪个参数去了哪里 :P (当然还是+1,因为你总是很懂 :P) - Joran Beasley
1
@JoranBeasley,我可以轻松地使用'{:{}{}d}'在字符串中计算到3个开括号--将其拼写为{0:{1}{2}d}对我来说没有任何好处,只会增加噪音。现在'{dat:{fil}{wid}d}'.format(dat=2, fil=0, wid=3)虽然更冗长,但确实在参数角色方面增加了一些价值。 - Alex Martelli

3

正确的方式是使用print "I {} Stack Overflow." .format(var)。

如果需要多个变量,只需放置更多的花括号,并用逗号分隔变量名称。

print "I {} Stack Overflow. It is a great {} {}!".format(var, var1, var3)

它们都是“正确的”……我很好奇你从哪里得到的信息,认为空括号比索引或变量名更受欢迎。 - Joran Beasley
我上面描述的三种方法都是有效的,为什么你说空花括号方法是“正确”的方式? - NimbusScale
那只是我被教导的方式。知道还有其他两种方法也可以做,真是太好了。谢谢。 - Brandon Pharis
2
"I {feel_about} Stack Overflow.".format(feel_about="am annoyed with") - Joran Beasley

3

我知道这是一个老问题,但Python 3.6带来了一个非常酷的字符串格式,称为"f-strings"。它类似于Javascript。以下是一个简单的示例:

name = "John"
age = 25

print(f"My name is {name} and I am {age} years old.")

它只在Python 3.6及以上版本中工作,但我认为这是Python中格式化字符串最简单、最易读的方法。


1

在使用一个或两个变量时,可以使用空的花括号。我建议使用命名替换:

  • 对于更多的变量
  • 在替换字符串难以阅读的情况下
  • 当注入的变量重复时

那么你永远不会使用索引号方法吗? - NimbusScale
2
在格式化过程中重用变量时,我会使用索引1,例如"{0} {1} {0}".format(a,b) - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接