簡體   English   中英

有沒有辦法簡化對具有多個條件的變量的賦值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM