字符串格式化命名参数?
我知道这个问题很简单,但我不知道怎么在网上搜索。
我想知道怎么做
print '<a href="%s">%s</a>' % (my_url)
这样可以让 my_url
被用两次?我猜我需要给 %s
起个名字,然后在参数中用一个字典,但我不太确定正确的写法是什么?
顺便说一下,我知道我可以在参数中直接用两次 my_url
,但这不是我想要的 :)
8 个回答
在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()时,未命名的参数必须放在前面,然后是命名参数,接着是*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))
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这个过程就像是搬家,把东西从一个箱子搬到另一个箱子。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据不完整。这就像是你在搬家的时候,发现有些东西没有打包好,或者有些箱子里缺少东西。
为了避免这些问题,我们可以提前检查一下数据,确保它们都是完整的、格式正确的。这样在搬家的时候,就不会出现麻烦了。
总之,处理数据就像搬家一样,需要仔细检查,确保一切都准备好,这样才能顺利进行。
print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}
Python 3.6+ 的解决方案
Python 3.6 引入了 字面字符串格式化,这样你就可以在字符串中格式化命名参数,而不需要在字符串外重复这些命名参数:
print(f'<a href="{my_url:s}">{my_url:s}</a>')
这段代码会计算 my_url
,所以如果它没有定义,你会遇到 NameError
错误。实际上,你可以在这里写任何有效的 Python 表达式,只要它的结果是一个字符串(因为使用了 :s
格式代码)。如果你想要一个表达式的字符串表示,而这个表达式的结果可能不是字符串,可以把 :s
替换成 !s
,就像在普通的字符串格式化中那样。
关于字面字符串格式化的详细信息,可以查看 PEP 498,这是它首次被介绍的地方,还有 PEP 701,在这里扩展了允许的语法(从 Python 3.12 开始)。