可以在三重引号中包含变量吗? 如果可以,怎么做?

对于一些人来说,这可能是一个非常简单的问题,但是它却难住了我。可以在 python 的三引号中使用变量吗?

在下面的示例中,如何在文本中使用变量:

wash_clothes = 'tuesdays'
clean_dishes = 'never'


mystring =""" I like to wash clothes on %wash_clothes
I like to clean dishes %clean_dishes
"""


print(mystring)

我希望结果是:

 I like to wash clothes on tuesdays
I like to clean dishes never

如果没有,什么是最好的方法来处理大块的文本,您需要一对夫妇的变量,并有大量的文本和特殊字符?

97753 次浏览

One of the ways in Python 2 :

>>> mystring =""" I like to wash clothes on %s
... I like to clean dishes %s
... """
>>> wash_clothes = 'tuesdays'
>>> clean_dishes = 'never'
>>>
>>> print mystring % (wash_clothes, clean_dishes)
I like to wash clothes on tuesdays
I like to clean dishes never

Also look at string formatting

Yes. I believe this will work.

do_stuff = "Tuesday"

mystring = """I like to do stuff on %(tue)s""" % {'tue': do_stuff}

EDIT: forgot an 's' in the format specifier.

The preferred way of doing this is using str.format() rather than the method using %:

This method of string formatting is the new standard in Python 3.0, and should be preferred to the % formatting described in String Formatting Operations in new code.

Example:

wash_clothes = 'tuesdays'
clean_dishes = 'never'


mystring =""" I like to wash clothes on {0}
I like to clean dishes {1}
"""


print mystring.format(wash_clothes, clean_dishes)

I think the simplest way is str.format() as others have said.

However, I thought I'd mention that Python has a string.Template class starting in Python2.4.

Here's an example from the docs.

>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'

One of the reasons I like this is the use of a mapping instead of positional arguments.

Also note that you don't need the intermediate variable:

name = "Alain"
print """
Hello %s
""" % (name)

Yes! Starting from Python 3.6 you can use the f strings for this: They're interpolated in place, so mystring would have the desired value after the mystring = ... line:

wash_clothes = 'tuesdays'
clean_dishes = 'never'


mystring = f"""I like to wash clothes on {wash_clothes}
I like to clean dishes {clean_dishes}
"""


print(mystring)

Should you need to add a literal { or } in the string, you would just double it:

if use_squiggly:
kind = 'squiggly'
else:
kind = 'curly'


print(f"""The {kind} brackets are:
- '\{\{', or the left {kind} bracket
- '}}', or the right {kind} bracket
""")

would print, depending on the value of use_squiggly, either

The squiggly brackets are:
- '{', or the left squiggly bracket
- '}', or the right squiggly bracket

or

The curly brackets are:
- '{', or the left curly bracket
- '}', or the right curly bracket

Pass multiple args in simple way

wash_clothes = 'tuesdays'
clean_dishes = 'never'
a=""" I like to wash clothes on %s I like to clean dishes %s"""%(wash_clothes,clean_dishes)
print(a)