我當前的 if-else 塊看起來像這樣 -
def do_something(value):
if value <= 0:
return 1
elif value > 0 and value < 5:
return 2
else:
return 3
請注意,該示例不是我的代碼的直接表示。為了簡潔起見,我已經顯著減少了 if-else 塊的數量。我想做的是創建一個字典,可以將每個條件的閾值作為鍵保存。這是我的意思的一個例子。
dict_factory_pattern = {
0: 1,
1-4: 2,
5-inf: 3
}
# With the dictionary structure above I want to refactor my do_something () to as shown below
def do_something(value):
return dict_factory_pattern[value]
這可能嗎?
uj5u.com熱心網友回復:
為了減少代碼量,您可以在 dict 中宣告閾值并對其進行迭代。這本質上與擁有多個if陳述句相同,只是您不必自己拼出它們。但是,您確實失去了多個條件的靈活性,因為相同的比較(例如小于或等于)適用于所有閾值。規則集的緊湊性可能是值得的。
thresholds = {
0: 1,
5: 2,
float('inf'): 3,
}
def find_value(n):
for threshold, result in thresholds.items():
if n <= threshold:
return result
[find_value(n) for n in [-0.5, 0, 0.5, 10]] # gives [1, 1, 2, 3]
uj5u.com熱心網友回復:
您可以使用區間樹。請注意,它的邊界值包括下限但不包括上限。
# pip install intervaltree
from intervaltree import IntervalTree
tree = IntervalTree()
tree[float('-inf'):0] = 1
tree[0:5] = 2
tree[5:float('inf')] = 3
def find_value(n):
interval = tree[n]
if interval:
result = sorted(interval)[0]
return result.data
[find_value(n) for n in [-0.5, 0, 0.5, 10]] # gives [1, 2, 2, 3]
uj5u.com熱心網友回復:
字典不能做這樣的事情。單獨的選擇可以通過條件來完成。假設您的輸入是價值
value = int(input("input value"))
res = 1 if value <= 0 else 2 if 1 <= value <= 4 else 5
我注意到這是您所關注的工廠模式。因此,例如,您有三個要創建(構建)的物件,然后執行
class FrogWorld:
pass
class Wizard:
pass
class StreetFighter:
pass
value = int(input("input value"))
res = FrogWorld if value <= 0 else Wizard if 1 <= value <= 4 else StreetFighter
res 將是現在。這只是一個簡短的回答。可以更精細的表達這個
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431536.html
標籤:Python python-3.x 字典
