在Python string format()中用单个空格填充

2024-06-25 22:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

恐怕这是一个基本的python问题,但我找不到合适的答案。 我想在占位符前面添加一个填充空间。在

这是我的例子:

user = 'Jhon'
'Hi {u}!'.format(u=user if user else '')

# result
'Hi Jhon!'

现在一切正常,直到我的uservar为空或为false,在这种情况下,这是上面的结果

^{pr2}$

相反,我想要'Hi!'作为结果。在

现在我尝试了format()填充选项,比如{:>1},但是ofc不起作用,因为它将添加足够的填充来达到字符长度1。在

最后我做了这样的事情:

'Hi{u:>{p}}!'.format(u=user if user else '', p=1+len(user))

上面的方法很好,但我觉得这有点老套,我现在想知道是否有一种内在的方法可以做到这一点。在

谢谢你!在


Tags: 方法答案falseformatif空间情况result
1条回答
网友
1楼 · 发布于 2024-06-25 22:39:45

以下是我在评论中发布的解决方案:

'Hi{u}!'.format(u=' ' + user if user else '')

您在问题中发布的解决方案不太管用,但可以通过将填充长度计算更改为

^{pr2}$

bool函数确定它的参数是True ish还是False ish,并分别返回True或{}。但是True和{}可用于算术运算,它们分别计算为1和0。在

下面的代码演示了各种解决方案,其中包括一对使用文本字符串插值(也称为f-strings)的代码,它们在python3.6+中可用。在

for user in ('John', ''):
    print('user is {!r}'.format(user)) 
    # Gruber
    print('Hi{u:>{p}}!'.format(u=user if user else '', p=1+len(user)))
    # Gruber, fixed
    print('Hi{u:>{p}}!'.format(u=user if user else '', p=bool(user) + len(user)))
    # Ryan
    print('Hi {u}!'.format(u=user) if user else 'Hi!')
    # PM 2Ring
    print('Hi{u}!'.format(u=' ' + user if user else ''))
    print('Hi{p}{u}!'.format(u=user, p=' ' if user else ''))
    # Python 3.6
    print(f'Hi{user and " " or ""}{user}!')
    print(f'Hi{" " if user else ""}{user}!')
    # Old `%-style` interpolation
    print('Hi%s%s!' % (user and " " or "", user))

    print()

输出

user is 'John'
Hi John!
Hi John!
Hi John!
Hi John!
Hi John!
Hi John!
Hi John!
Hi John!

user is ''
Hi !
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!

有关f字符串的信息,请参见Python官方文档中的Formatted string literals。另请参见PEP 498 Literal String InterpolationPEP 536 Final Grammar for Literal String Interpolation。在

相关问题 更多 >