给出一些变量
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)
但这使阅读变得非常困难,因为您必须转义第一个字符串中未替换的格式。
答案 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'