字符串格式命名参数?

时间:2010-03-16 02:50:31

标签: python string syntax

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

我该怎么办

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

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


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

7 个答案:

答案 0 :(得分:212)

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

答案 1 :(得分:65)

在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必须首先出现,然后是命名参数,然后是* 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))

答案 2 :(得分:33)

Python 3.6 +

中的解决方案

Python 3.6引入了文字字符串格式,这样您就可以格式化命名参数,而不会在字符串外重复任何命名参数:

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

这将评估my_url,因此如果未定义,您将获得NameError。实际上,您可以编写任意Python表达式而不是my_url,只要它计算为字符串(因为:s格式化代码)。如果您希望表达式的结果可能不是字符串,请将:s替换为!s,就像使用常规的,字面前的字符串格式一样。

有关文字字符串格式的详细信息,请参阅PEP 498,它是首次引入的位置。

答案 3 :(得分:5)

对于构建HTML页面,您希望使用模板引擎,而不是简单的字符串插值。

答案 4 :(得分:5)

你会沉迷于语法。

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

答案 5 :(得分:2)

除了字典方式,了解以下格式可能很有用:

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

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

答案 6 :(得分:1)

另一种选择是使用format_map

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