我有一個像這樣作業的演算法(在偽代碼中):
def func_1(x):
apply processing 1 to x
return x
def func_2(x):
apply processing 2 to x
return x
def func_3(x):
apply processing 3 to x
return x
我想撰寫一個函式func_all_processing(data, execution_order),以定義的順序將所有這些函式應用于某些輸入資料并輸出處理后的資料,例如:
func_all_processing(data, [1,2,3])
會做:
processed_data = func_1(data)
processed_data = func_2(processed_data)
processed_data = func_3(processed_data)
return processed_data
然而
func_all_processing(data, [3,1,2])
會做:
processed_data = func_3(data)
processed_data = func_1(processed_data)
processed_data = func_2(processed_data)
return processed_data
正確的方法是什么?
uj5u.com熱心網友回復:
將函式放在一個串列中,然后將該串列傳遞給func_all_processing(),它會遍歷它們。
def func_all_processing(data, funcs):
for f in funcs:
data = f(data)
return data
print(func_all_processing(data, [func_1, func_2, func_3]))
如果您想測驗所有不同的順序,請使用itertools.permutations()回圈不同的排列。
uj5u.com熱心網友回復:
你可以這樣做:
def process_all(x,process_order:list):
data = x
for process in process_order:
processed_date = globals()["func_{}".format(process.__str__())](data)
data = processed_date
return processed_date
uj5u.com熱心網友回復:
正如@Bamar 所指出的,我將使用函式串列并將函式封裝在 func_all_processing 函式中,如下所示:
def func_all_processing(data: [int, float], order: list) -> object:
def func_1(x):
apply processing 1 to x
return x
def func_2(x):
apply processing 2 to x
return x
def func_3(x):
apply processing 3 to x
return x
func_list = [func_1, func_2, func_2]
rslt = data
for i in order:
rslt = func_list[i](rslt)
return rslt
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/415931.html
標籤:
下一篇:一個偶數和奇數放置的排序陣列
