字符串格式。从本地环境获取关键字参数

时间:2017-02-17 14:41:34

标签: python python-2.7

我经常看到以下模式,并想知道是否有办法避免重复。

life = 42
badger = some_function()
s = "({life}, {badger})".format(life=life,badger=badger)

局部变量通常具有与字符串中的含义相对应的连贯名称。我目前使用的更简洁:

s = "({0}, {1})".format(life,badger)

使用关键字,模板通常更清晰。是否有一种通用/简明的方法来获取格式以在包含函数的词法环境中查找关键字?

s  = "({life}, {badger})".format(env())

谢谢!

4 个答案:

答案 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'