What's a nice idiom to do this:
Instead of: print "%s is a %s %s that %s" % (name, adjective, noun, verb)
I want to be able to do something to the effect of: print "{name} is a {adjective} {noun} that {verb}"
"{name} is a {adjective} {noun} that {verb}".format(**locals())
locals()
gives a reference to the current namespace (as a dictionary). **locals()
unpacks that dictionary into keyword arguments ( f(**{'a': 0, 'b': 1})
is f(a=0, b=1)
). .format()
is "the new string formatting" , which can by the way do a lot more (eg {0.name}
for the name attribute of the first positional argument). Alternatively, string.template
(again, with locals if you want to avoid a redundant {'name': name, ...}
dict literal).
Since Python 3.6 you can now use this syntax, called f-strings, which is very similar to your suggestion 9 years ago 😊
print(f"{name} is a {adjective} {noun} that {verb}")
f-strings or formatted string literals will use variables from the scope they're used in, or other valid Python expressions.
print(f"1 + 1 = {1 + 1}") # prints "1 + 1 = 2"
use 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'
For python 2 do:
print name,'is a',adjective,noun,'that',verb
For python 3 add parens:
print(name,'is a',adjective,noun,'that',verb)
If you need to save it to a string, you'll have to concatenate with the +
operator and you'll have to insert spaces. print
inserts a space at all the ,
unless there is a trailing comma at the end of the parameters, in which case it forgoes the newline.
To save to string var:
result = name+' is a '+adjective+' '+noun+' that '+verb
Since python 3.8 it's also possible to expand variable names into strings which can be very useful for logging and debugging:
name="John Doe"
print(f"Found person {name=}")
# will print:
"Found person name='John Doe'"
# vs no variable name
print(f"Found person {name=}")
# will print:
"Found person John Doe"
Note the =
sign after variable which tells the formatter to include variable name.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.