繁体   English   中英

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

[英]Reducing variable name duplication when using os.getenv

我经常发现自己在下面的样式中编写重复感觉代码(因为它发生在Django settings.py ,但这个问题意味着更普遍):

STACKEXCHANGE_CLIENT_ID = os.getenv('STACKEXCHANGE_CLIENT_ID')
STACKEXCHANGE_CLIENT_SECRET = os.getenv('STACKEXCHANGE_CLIENT_SECRET')
# et cetera

当然,在很多情况下我不希望我的本地变量名称与环境变量的名称相匹配,但它发生得足够多,我想知道是否有一种避免名称重复的好方法。

以下代码适用于我:

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

f('TERM')

print TERM

但是我无意在生产中使用它,因为引用locals()上的Python文档

注意:不应修改此词典的内容;

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

引用: 如何以编程方式设置全局(模块)变量?

import sys, os

opts = (
    'STACKEXCHANGE_CLIENT_ID', 
    'STACKEXCHANGE_CLIENT_SECRET'
)

module = sys.modules[__name__]
for o in opts:
    setattr(module, o, os.getenv(o))

在引用的答案的评论中,它链接到另一个表明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字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM