在Python中,有没有办法在多行字符串中使用变量?

8

我需要将下面的代码作为邮件发送脚本的一部分:

try:
    content = ("""From: Fromname <fromemail>
    To: Toname <toemail>
    MIME-Version: 1.0
    Content-type: text/html
    Subject: test

    This is an e-mail message to be sent in HTML format

    <b>This is HTML message.</b>
    <h1>This is headline.</h1>
    """)

...

    mail.sendmail('from', 'to', content)

我希望每次使用不同的主题(比如函数参数)。

我知道有几种方法可以实现这个目标。

然而,我也在一些其他脚本中使用ProbLog(一种基于Prolog语法的概率编程语言)。

据我所知,Python中使用ProbLog的唯一方法是通过字符串,如果字符串被分成几个部分; 例如=(“”“字符串”“”,变量,“”“字符串2”“”“),就像上面的电子邮件示例一样,我无法使它起作用。

实际上,我还有一些脚本,其中使用多行字符串中的变量可能会很有用,但您已经明白了。

有没有办法让这个工作呢? 提前感谢!


2
我对你试图做什么感到困惑。 - erip
3
你似乎需要一个多行字符串,而不是一个多行注释。在注释中使用变量没有任何意义-注释不会被执行。 - Elliott Frisch
Python没有多行注释。三引号字符串不是注释。 - PM 2Ring
没错。抱歉。多行字符串。我是Python的新手。我只是没有想到它。 - user5835566
这个问题被错误地标记为 https://dev59.com/M3RB5IYBdhLWcg3wxZ_Y 的重复... 这个问题不是重复的,因为另一个问题没有涉及使用多行字符串。 - dreftymac
1个回答

16

使用.format方法:

content = """From: Fromname <fromemail>
    To: {toname} <{toemail}>
    MIME-Version: 1.0
    Content-type: text/html
    Subject: {subject}

    This is an e-mail message to be sent in HTML format

    <b>This is HTML message.</b>
    <h1>This is headline.</h1>
"""
mail.sendmail('from', 'to', content.format(toname="Peter", toemail="p@tr", subject="Hi"))

当最后一行变得太长时,你可以创建一个字典并对其进行解包:

peter_mail = {
    "toname": "Peter",
    "toemail": "p@tr",
    "subject": "Hi",
}
mail.sendmail('from', 'to', content.format(**peter_mail))

从Python 3.6开始,您还可以使用多行f字符串:

toname = "Peter"
toemail = "p@tr"
subject = "Hi"
content = f"""From: Fromname <fromemail>
    To: {toname} <{toemail}>
    MIME-Version: 1.0
    Content-type: text/html
    Subject: {subject}

    This is an e-mail message to be sent in HTML format

    <b>This is HTML message.</b>
    <h1>This is headline.</h1>
"""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接