首先,我正在努力获得这样的期望输出:
*********************************************************************
hello
*********************************************************************
为此,我已将 所需的输出分配给具有多行字符串的变量, 并使用 format 打印相同的内容。
$ cat varibale.py
decorator = """ **********************************************************************
{}
********************************************************************** """
print(decorator.format("hello"))
输出:
**********************************************************************
hello
**********************************************************************
上述方法的问题是 输出的第三行中的额外空格 看起来很奇怪。
我能够通过以下方式实现这一目标:
$ cat varibale.py
decorator = """ **********************************************************************
{}
*********************************************************************
"""
print(decorator.format("hello"))
输出:
**********************************************************************
hello
*********************************************************************
但是这样我的代码看起来不太好,因为它没有遵循缩进。
请建议实现所需输出的正确方法。
原文由 Here_2_learn 发布,翻译遵循 CC BY-SA 4.0 许可协议
使多行文字字符串看起来不错的一种方法是使用反斜杠来转义换行符,如下所示:
输出
但是,PEP-008 不鼓励这样使用反斜杠。它太脆弱了:如果反斜杠和换行符之间有一个空格,那么换行符就不会被转义,反斜杠就会被打印出来。
一种更通用的方法是使用一个函数来计算使文本居中所需的填充量,并通过嵌套格式说明符应用它。例如:
输出
怎么运行的
那个格式字符串有点密集,所以我想我应该试着解释一下。 ;) 有关此主题的完整信息,请参阅文档中的 格式字符串语法。下面的解释借鉴并解释了这些文档。
格式字符串中
{}
中包含的内容称为“替换字段”。替换字段中的第一项是可选字段名称。这让我们可以识别.format
的哪个 arg 与此替换字段一起使用。字段名称有几个可能的变体,此格式字符串使用数字名称,因此它通过位置标识.format
args。也就是说,0 对应于stars
,1 对应于s
,2 对应于pad
。如果没有给出字段名称,它们将自动由数字 0、1、2 等填充(除非您使用的是 Python 2.6,其中字段名称是强制性的)。这在大多数时候都非常有用,因此大多数格式字符串都不会费心使用字段名称。
在字段名称之后,我们可以给出一个“格式说明符”或“格式规范”来描述如何显示值。冒号
:
将字段名称与格式规范分开。如果您不提供格式规范,那么您会得到一个默认格式,大多数情况下这就足够了。但在这里我们确实想要更多的控制,所以我们需要提供格式规范。在表单规范中,
>
符号强制字段在可用空间内右对齐。在对齐符号之后,我们可以提供一个数字来指定最小字段宽度;如有必要,该字段将自动变大。例如,
'{0:>6}'.format('test')
表示将参数 0(’test’)放在至少 6 个字符宽的空间中,并向右对齐。结果是字符串' test'
。但是格式规范实际上可以包含一个全新的替换字段!这允许我们提供一个变量来控制字段宽度。因此,在我的格式字符串中
{1:>{2}}
表示将 arg 1 放在这里(s
),在宽度为 arg 2 的字段中右对齐(pad
)。只允许一层替换字段嵌套,但很难想象您实际上想要更深嵌套的情况。所以把它们放在一起:
'{0}\n{1:>{2}}\n{0}'
告诉.format
构建一个以 arg 0 开头的字符串(stars
,然后使用新的规范格式-)接着是 arg 1 (s
) 在宽度字段中右对齐pad
,接着是另一个换行符,最后是 arg 0 (stars
)我希望这足够有意义。 :)
在 Python 3.6+ 中,我们可以使用 f 字符串: