我正在编写一个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的技巧也可以接受。
答案 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
阻止了这种情况),可能没有必要。您 您可能想要考虑为此添加一条注释,以使其明确不会发生,但是代码本身并不需要真正更改。