22

这样做的好习惯是什么:

代替: print "%s is a %s %s that %s" % (name, adjective, noun, verb)

我希望能够做一些事情: print "{name} is a {adjective} {noun} that {verb}"

4

4 回答 4

25
"{name} is a {adjective} {noun} that {verb}".format(**locals())
  • locals()给出对当前命名空间的引用(作为字典)。
  • **locals()将该字典解压缩为关键字参数(f(**{'a': 0, 'b': 1})is f(a=0, b=1))。
  • .format()“新的字符串格式”,顺便说一句,它可以做更多的事情(例如{0.name},对于第一个位置参数的名称属性)。

或者,string.template(再次,如果你想避免多余的{'name': name, ...}字典文字,使用本地人)。

于 2011-01-30T01:33:05.793 回答
8

从 Python 3.6 开始,您现在可以使用这种称为 f-strings 的语法,这与您 9 年前的建议非常相似

print(f"{name} is a {adjective} {noun} that {verb}")

f-strings 或格式化的字符串文字将使用它们所使用的范围内的变量,或其他有效的 Python 表达式。

print(f"1 + 1 = {1 + 1}")  # prints "1 + 1 = 2"
于 2020-04-22T10:36:00.743 回答
5

采用string.Template

>>> from string import Template
>>> t = Template("$name is a $adjective $noun that $verb")
>>> t.substitute(name="Lionel", adjective="awesome", noun="dude", verb="snores")
'Lionel is a awesome dude that snores'
于 2011-01-30T01:33:46.467 回答
3

对于 python 2 做:

print name,'is a',adjective,noun,'that',verb

对于 python 3 添加括号:

print(name,'is a',adjective,noun,'that',verb)

如果需要将其保存为字符串,则必须与+运算符连接,并且必须插入空格。 print插入一个空格,,除非参数末尾有逗号,在这种情况下它放弃换行符。

要保存到字符串 var:

result = name+' is a '+adjective+' '+noun+' that '+verb
于 2011-01-30T01:24:26.533 回答