string格式命名参数?

我知道这是一个非常简单的问题,但我不知道如何谷歌。

我能怎么做

print '<a href="%s">%s</a>' % (my_url) 

my_url被使用了两次? 我假设我必须“命名” %s ,然后在参数中使用字典,但我不确定正确的语法?


只是供参考,我知道我可以在params中使用my_url两次,但这不是重点:)

 print '<a href="%(url)s">%(url)s</a>' % {'url': my_url} 

在Python 2.6+和Python 3中,您可以select使用较新的string格式化方法。

 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(一个字典如果你知道什么对你有好处的话,用琴键键入)。 插值点首先通过replace标签处的命名值,然后确定剩下的位置来确定。 所以,你也可以这样做…

 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)) 

在Python 3.6+中的解决scheme

Python 3.6引入了文本string格式化 ,以便您可以格式化命名参数,而不必在string外重复任何命名参数:

 print(f'<a href="{my_url}">{my_url}</a>') 

请参阅string格式化,PEP 498

为了构buildHTML页面,您希望使用模板引擎,而不是简单的string插值。

你会沉迷于语法。

同样在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 

除字典方式外,了解以下格式可能也是有用的:

print '<a href="%s">%s</a>' % (my_url, my_url)

这里有点多余,修改代码时字典方式肯定不太容易出错,但是仍然可以使用元组进行多次插入。 第一个%s代替了元组中的第一个元素,第二个%s代替了元组中的第二个元素,依此类推为元组中的每个元素。