我经常看到以下模式,并想知道是否有办法避免重复。
life = 42
badger = some_function()
s = "({life}, {badger})".format(life=life,badger=badger)
局部变量通常具有与字符串中的含义相对应的连贯名称。我目前使用的更简洁:
s = "({0}, {1})".format(life,badger)
使用关键字,模板通常更清晰。是否有一种通用/简明的方法来获取格式以在包含函数的词法环境中查找关键字?
s = "({life}, {badger})".format(env())
谢谢!
答案 0 :(得分:2)
Python 3.6已经使用literal string interpolation解决了这个问题。 F-字符串:
>>> life = '2'
>>> badger = 'more'
>>> f'{life} {badger}'
'2 more'
如果升级费用不高,那么你可以朝这个方向看。
答案 1 :(得分:1)
摩西'答案对于python 3来说很棒
如果你需要python 2的东西,你可以试试这个:
In [6]: env = dict(life=42, badger='badger')
In [7]: env
Out[7]: {'badger': 'badger', 'life': 42}
In [11]: "({life}, {badger})".format(**env)
Out[11]: '(42, badger)'
In [12]: "({0}, {1})".format(*env)
Out[12]: '(life, badger)'
In [13]:
os.environ的例子
In [13]: import os
In [14]: "({0}, {1})".format(*os.environ)
Out[14]: '(VIEWCLIENT_WINDOWS_TIMEZONE, VIEWCLIENT_BROKER_DOMAINNAME)'
In [15]:
免责声明:我早在咖啡前读过这篇文章。虽然这项技术有效。其他人是正确的,你可以用本地代替os.environ。
我更专注于使用*'
答案 2 :(得分:1)
您可以使用locals()
。
s = "({life}, {badger})".format(**locals())
答案 3 :(得分:1)
如果您不能使用f-strings,可以选择使用locals()
和**kwargs
参数传递形式:
>>> a = 3
>>> b = 5
>>> '{a} {b}'.format(**locals())
'3 5'