我知道这个问题很简单,但我不知道怎么谷歌。
我该怎么办
print '<a href="%s">%s</a>' % (my_url)
所以 my_url被使用了两次?我假设我必须“命名”%s,然后在参数中使用 dict,但是我不确定正确的语法?
my_url
%s
仅供参考,我知道我可以在参数中使用 my_url两次,但这不是重点:)
print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}
对于构建 HTML 页面,您需要使用模板引擎,而不是简单的字符串插值。
除了使用字典的方法外,了解以下格式可能也有用:
print '<a href="%s">%s</a>' % (my_url, my_url)
这里有点多余,而且字典方法在修改代码时当然不容易出错,但是仍然可以使用元组进行多次插入。第一个 %s被替换为元组中的第一个元素,第二个 %s被替换为元组中的第二个元素,以此类推。
在 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))
这是严格的位置,并且只附带了格式()参数遵循 Python 规则的警告,在这些规则中,未命名的参数必须排在第一位,接着是命名的参数,接着是 * args (一个类似 list 或 tuple 的序列) ,然后是 * kwargs (如果你知道什么对你有好处的话,用字符串键控的 dict)。 插值点首先通过在它们的标签上替换命名值来确定,然后从剩下的位置来确定位置。 所以,你也可以这样做..。
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))
你会对语法上瘾的。
同样是 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
Python 3.6引入了 文字字符串格式化,这样您就可以格式化命名参数,而不必在字符串之外重复任何命名参数:
print(f'<a href="{my_url:s}">{my_url:s}</a>')
这将评估 my_url,所以如果它没有定义,您将得到一个 NameError。实际上,只要计算结果为字符串(因为使用了 :s格式化代码) ,就可以编写任意的 Python 表达式来代替 my_url。如果您希望为可能不是字符串的表达式的结果提供字符串表示形式,请将 :s替换为 !s,就像使用常规的文本前字符串格式一样。
NameError
:s
!s
有关字符串格式设置的详细信息,请参阅 PEP 498,它是在哪里首次引入的。
另一种选择是使用 format_map:
format_map
print('<a href="{s}">{s}</a>'.format_map({'s': 'my_url'}))
我推荐这种语法
dictionary_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", } ) )