有没有一种方法可以简化具有多个条件的变量分配?

时间:2019-08-03 12:27:24

标签: python

我正在编写一个Python脚本来构建代码。该脚本可以两种模式之一运行:调试和优化。可以通过命令行参数--debug--optimized设置模式。这些参数只能给出一个。也就是说,您不能这样做:

python build.py --debug --optimized # command usage error

此外,如果未提供任何参数,则脚本默认使用我的配置文件中的DEBUG设置。

以下是脚本调用方式的示例:

python build.py --debug以调试模式构建。
python build.py --optimized以优化模式构建。
python build.py使用配置文件中的调试设置。

这是我用来设置调试模式的代码的简化版本:

if options["debug"]:
    debug = True  # --debug was given
elif options["optimized"]:
    debug = False  # --optimized was given
else:
    debug = settings.DEBUG  # use DEBUG from config file

尽管可以,但是我觉得有一种方法可以简化此代码。我了解python中的条件赋值,但我想不到它在这里如何工作。

您如何简化此代码以使其更短或更易读?还是它已经尽可能简化了?

我正在使用python 3.7,因此任何仅python 3的技巧也可以接受。

1 个答案:

答案 0 :(得分:1)

一种方法是切换到单层并以相反的顺序执行(以后的工作优先于以前的工作):

debug = settings.DEBUG                  # normal state.
if options["optimized"]: debug = False  # optimised overrides default
if options["debug"]:     debug = True   # debug overrides default AND optimised

这实际上并没有涵盖您同时指定“优化”和“调试”的“错误”条件,但通常要简单得多,就是让一个优先于另一个。

如果您真的要捕获错误情况,则可以在两个if语句之前进行预检查,例如:

if options["optimized"] and options["debug"]:
    raiseSomeSortOfErrorCondition()

但是,根据您的评论,这种情况将永远不会发生(因为argparse阻止了这种情况),可能没有必要。您 您可能想要考虑为此添加一条注释,以使其明确不会发生,但是代码本身并不需要真正更改。