[英]Is there a way to simplify assignment to variable with multiple conditions?
我正在編寫一個 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 唯一的技巧也是可以接受的。
一種方法是切換到單行並以相反的順序進行(稍后的分配覆蓋較早的分配):
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
阻止了它),這可能沒有必要。 您可能需要考慮為該效果添加注釋,以明確它不會發生,但代碼本身並不真正需要更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.