如何避免在三元运算符分配中重复?

时间:2018-12-26 11:49:35

标签: python

os.environ获取多个配置值时,最好在python代码中使用默认值,以轻松地允许应用程序在多个上下文中启动。 典型的django settings.py具有许多

SOME_SETTING = os.environ.get('SOME_SETTING')

行。

为提供明智的默认设置,我们选择了

SOME_SETTING = os.environ.get('SOME_SETTING') or "theValue"

但这Example是因为用

调用应用程序
SOME_SETTING="" 

manage.py

会将SOME_SETTING设置为theValue,而不是显式定义的""

是否可以使用三元数a = b if b else d在python中分配值,而无需重复b或之前将其分配给速记变量?

如果我们看一下

SOME_VERY_LONG_VAR_NAME = os.environ.get('SOME_VERY_LONG_VAR_NAME') if os.environ.get('SOME_VERY_LONG_VAR_NAME') else 'meh'

能够做类似的事情会更好

SOME_VERY_LONG_VAR_NAME = if os.environ.get('SOME_VERY_LONG_VAR_NAME') else 'meh'

2 个答案:

答案 0 :(得分:5)

就像Python的内置映射类dict一样,os.environ.get有第二个参数,看来您想要它:

SOME_SETTING = os.environ.get('SOME_SETTING', "theValue")

这与

相同
try:
    SOME_SETTING = os.environ['SOME_SETTING']
except KeyError:
    SOME_SETTING = "theValue"

答案 1 :(得分:2)

如果您阅读dict.get()的文档,则会发现该方法的签名为get(self, key, default=None)。如果在字典中未找到密钥,则返回default参数(默认为明智的None)。因此,您可以使用第二个参数来代替进行错误的布尔测试:

SOME_SETTING = os.environ.get('SOME_SETTING', "theValue")