使用pyformat进行条件格式化

时间:2019-10-01 08:50:34

标签: python string

给出一些变量

flag = True
x = "hello"
y = "world"

我想打印以下字符串:

"hello world"(如果flag is True"hello 'world'"(如果flag is False)。 可以使用以下语句完成此操作:

print("{} {}".format(x, y if flag else "'{}'".format(y)))

问题是,可以使用pyformat直接指定这种条件格式吗?即是否可以根据某个变量指定不同的格式字符串?

一种解决方案可能是执行两种格式:

'{{}} {}'.format("{}" if flag else "'{}'").format(x, y)

但这使阅读变得非常困难,因为您必须转义第一个字符串中未替换的格式。

4 个答案:

答案 0 :(得分:1)

尽管我非常喜欢@schwobaseggl的解决方案,但我觉得您最好做一个适当的if

if flag:
    print(f"{x} {y}")
else:
    print(f"{x} '{y}')

这将使您的代码更具可读性和可维护性。否则,就好像您只是试图隐藏if并制作意大利面一样。

答案 1 :(得分:0)

如果您使用python 3.6或更高版本,则可以使用f'strings:print(f"{x} {y}" if flag else f"{x} '{y}'")。 更多信息:https://www.python.org/dev/peps/pep-0498/

答案 2 :(得分:0)

我认为不可能选择这样的不同格式的字符串。在您的具体情况下,您可能会更精简一些技巧:

("{} '{}'", "{} {}")[flag].format(x, y)
# 'hello world'
flag = False
("{} '{}'", "{} {}")[flag].format(x, y)
# "hello 'world'"

通常,将控制变量的可能值与其对应的格式字符串进行dict映射就足够简单了。

答案 3 :(得分:0)

尝试一下

>>> print("{x} {flag}{y}{flag}".format(x=x,y=y, flag= "" if flag else "'"))
hello world
>>> flag = False
>>> print("{x} {flag}{y}{flag}".format(x=x,y=y, flag= "" if flag else "'"))
hello 'world'