我知道这是一个非常简单的问题,但我不知道如何在谷歌上搜索它。
我该怎么做?
print '<a href="%s">%s</a>' % (my_url)
那么如何使 my_url
被使用两次?我猜我必须给 %s
"命名",然后在 params 中使用一个字典,但我不确定正确的语法是什么?
只是提醒一下,我知道我可以在 params 中两次使用 my_url
,但这不是重点 :)
我知道这是一个非常简单的问题,但我不知道如何在谷歌上搜索它。
我该怎么做?
print '<a href="%s">%s</a>' % (my_url)
那么如何使 my_url
被使用两次?我猜我必须给 %s
"命名",然后在 params 中使用一个字典,但我不确定正确的语法是什么?
只是提醒一下,我知道我可以在 params 中两次使用 my_url
,但这不是重点 :)
print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}
在Python 2.6+和Python 3中,你可能选择使用更新的字符串格式化方法。
print('<a href="{0}">{0}</a>'.format(my_url))
这可以避免重复使用参数,或者
print('<a href="{url}">{url}</a>'.format(url=my_url))
如果你想要命名参数。
print('<a href="{}">{}</a>'.format(my_url, my_url))
这种格式化方式是严格按位置顺序进行的,但需要注意的是,format()函数的参数遵循Python规则,即未命名参数必须先出现,然后是命名参数,接着是*args(类似于列表或元组的序列),最后是*kwargs(如果你知道怎么做,可以使用字符串键的字典)。 插值点首先通过替换其标签处的命名值来确定,然后从剩余部分进行按位置匹配。 因此,你也可以这样做...
print('<a href="{not_my_url}">{}</a>'.format(my_url, my_url, not_my_url=her_url))
但不包括这个...
print('<a href="{not_my_url}">{}</a>'.format(my_url, not_my_url=her_url, my_url))
"{arg1}".format(arg1="arg!")
这种命名格式适用于 Python 3.5,而更简洁的 f"literal {arg1}"
是 Python 3.6 或更新版本中的新创新,据我所知。 - MarkHuprint('<a href="{url}">{url</a>}'.format(url=my_url))
在内的此答案的更改,@jaapz的评论已不再有效。 这在Python 2和3中都可以很好地工作。 - Danila Vershininmy_url
。(尽管它似乎仍然可以工作——Python 会悄悄地忽略它,这对我来说是一个惊喜。) - Arthur TaccaPython 3.6引入了字面字符串格式化,因此您可以在字符串内部格式化命名参数,而无需重复使用外部的命名参数:
print(f'<a href="{my_url:s}">{my_url:s}</a>')
my_url
,所以如果它未定义,你将得到一个NameError
。实际上,你可以写任意的Python表达式来代替my_url
,只要它能够求值为字符串(因为有了:s
格式化代码)。如果你想要对可能不是字符串的表达式结果进行字符串表示,可以用!s
替换:s
,就像常规的预字面字符串格式化一样。您会迷上这种语法。
C# 6.0和EcmaScript开发人员也熟悉这种语法。
In [1]: print '{firstname} {lastname}'.format(firstname='Mehmet', lastname='Ağa')
Mehmet Ağa
In [2]: print '{firstname} {lastname}'.format(**dict(firstname='Mehmet', lastname='Ağa'))
Mehmet Ağa
对于构建HTML页面,您应该使用模板引擎而不是简单的字符串插值。
render()
方法生成电子邮件正文呢?没有规定你必须将模板输出提供给HttpResponse()
。Django非常灵活。 - Mike DeSimoneformat_map
:print('<a href="{s}">{s}</a>'.format_map({'s': 'my_url'}))
除了使用字典的方式,了解下面的格式也可能会有用:
print '<a href="%s">%s</a>' % (my_url, my_url)
这里有点多余,使用字典的方式当然更不容易出错,但是仍然可以使用元组进行多个插入。第一个%s
被替换为元组中的第一个元素,第二个%s
被替换为元组中的第二个元素,以此类推,每个元素都被替换。
my_url
实际上是一个函数调用,我不想让它被评估两次。两次也还好,但可能会达到20次:) - mpen(get_my_url(), )*20
仅调用函数一次,并重复 20 次。 - Ponkadoodledictionary_of_string_values = {
"my_text" : "go to w3schools",
"my_url" : "https://www.w3schools.com",
}
print ('<a href="{my_url}">{my_text}</a>'.format(**dictionary_of_string_values))
当你需要使用大量占位符格式化一个字符串时,它非常有用。
你还可以像这样使其更短:
print ('<a href="{my_url}">{my_text}</a>'.format(
**{
"my_text" : "go to w3schools",
"my_url" : "https://www.w3schools.com",
}
)
)