用Python格式化多行字符串的最优雅方法

2024-05-21 07:29:56 发布

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

我有一个多行字符串,我想用自己的变量改变它的某些部分。我真的不喜欢用+运算符将同一文本拼凑在一起。有更好的选择吗?

例如(需要内部引用):

line = """Hi my name is "{0}".
I am from "{1}".
You must be "{2}"."""

我想能够多次使用这个来形成一个更大的字符串,它将如下所示:

Hi my name is "Joan".
I am from "USA".
You must be "Victor".

Hi my name is "Victor".
I am from "Russia".
You must be "Joan".

有什么方法可以做到:

txt == ""
for ...:
    txt += line.format(name, country, otherName)

Tags: 字符串namefromtxtyouismyline
3条回答

除了列表,你还可以使用字典。如果有许多变量要同时跟踪,则这非常有用。

text = """\
Hi my name is "{person_name}"
I am from "{location}"
You must be "{person_met}"\
"""
person = {'person_name': 'Joan', 'location': 'USA', 'person_met': 'Victor'}

print text.format(**person)

注意,我输入的文本不同,因为它让我更容易排列文本。不过,您必须在开头“”和结尾“”之前添加“\”。

现在如果你在一个列表中有几本字典,你可以很容易地做到

people = [{'person_name': 'Joan', 'location': 'USA', 'person_met': 'Victor'},
          {'person_name': 'Victor', 'location': 'Russia', 'person_met': 'Joan'}]

alltext = ""
for person in people:
  alltext += text.format(**person)

或使用列表理解

alltext = [text.format(**person) for person in people]
info = [['ian','NYC','dan'],['dan','NYC','ian']]
>>> for each in info:
    line.format(*each)


'Hi my name is "ian".\nI am from "NYC".\nYou must be "dan".'
'Hi my name is "dan".\nI am from "NYC".\nYou must be "ian".'

star运算符将把列表解压到format方法中。

line = """Hi my name is "{0}".
I am from "{1}".
You must be "{2}"."""

tus = (("Joan","USA","Victor"),
       ("Victor","Russia","Joan"))

lf = line.format # <=== wit, direct access to the right method

print '\n\n'.join(lf(*tu) for tu in tus)

结果

Hi my name is "Joan".
I am from "USA".
You must be "Victor".

Hi my name is "Victor".
I am from "Russia".
You must be "Joan".

相关问题 更多 >