Python 使用os.getenv时减少变量名重复

Python 使用os.getenv时减少变量名重复,python,Python,我经常发现自己以下面的风格编写重复的感觉代码(碰巧,在Djangosettings.py中,但这个问题的含义更一般): 当然,在很多情况下,我不希望我的局部变量名与环境变量名匹配,但这种情况已经发生得够多了,我想知道是否有一种很好的方法来避免名称重复 以下代码适用于我: _locals = locals() def f(x): _locals[x] = os.getenv(x) f('TERM') print TERM 但我不打算在生产中使用这一点,引述如下: 注意:本词典的内容不

我经常发现自己以下面的风格编写重复的感觉代码(碰巧,在Django
settings.py中,但这个问题的含义更一般):

当然,在很多情况下,我不希望我的局部变量名与环境变量名匹配,但这种情况已经发生得够多了,我想知道是否有一种很好的方法来避免名称重复

以下代码适用于我:

_locals = locals()
def f(x):
    _locals[x] = os.getenv(x)

f('TERM')

print TERM
但我不打算在生产中使用这一点,引述如下:

注意:本词典的内容不得修改

因此,我想知道是否存在有效的“支持”/“批准”解决方案,如果存在,它可能是什么样子?

参考:

在参考答案的评论中,它链接到另一个建议
globals()
也可以直接更新的链接

_g = globals()
for o in opts:
    _g[o] = os.getenv(o)

我想,这在一定程度上是口味的问题,但我倾向于把这些放在字典里,所以:

STACKEXCHANGE_CLIENT_ID = os.getenv('STACKEXCHANGE_CLIENT_ID')
STACKEXCHANGE_CLIENT_SECRET = os.getenv('STACKEXCHANGE_CLIENT_SECRET')
将成为:

envars['STACKEXCHANGE_CLIENT_ID'] = os.getenv('STACKEXCHANGE_CLIENT_ID')
envars['STACKEXCHANGE_CLIENT_SECRET'] = os.getenv('STACKEXCHANGE_CLIENT_SECRET')

或者,您可以直接使用
os.environ
字典。

这在一般情况下完全有效。不幸的是,OP提到了django项目的settings.py,该项目希望它们是全局变量。是的,我可能对我的要求不够清楚,我只是不想把它狭隘地解释为一个与Django有关的问题,但全球性绝对是一个要求;谢谢,我想可以了,非常感谢——我很难找到适合我想做的事情的词汇,所以完全错过了另一个问题
STACKEXCHANGE_CLIENT_ID = os.getenv('STACKEXCHANGE_CLIENT_ID')
STACKEXCHANGE_CLIENT_SECRET = os.getenv('STACKEXCHANGE_CLIENT_SECRET')
envars['STACKEXCHANGE_CLIENT_ID'] = os.getenv('STACKEXCHANGE_CLIENT_ID')
envars['STACKEXCHANGE_CLIENT_SECRET'] = os.getenv('STACKEXCHANGE_CLIENT_SECRET')