如何避免三元运算符赋值中的重复



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

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

线。

为了提供合理的默认值,我们选择了

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

但是,这很容易出错,因为使用

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'

就像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"

如果你阅读dict.get()的文档,你会发现该方法的签名是get(self, key, default=None)default参数是在字典中找不到键时返回的内容(并且默认为合理的None)。因此,您可以使用第二个参数,而不是执行错误的布尔测试:

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

最新更新