我有下面的函數稱爲function_iterate_over_array,它接受一個數組和函數名稱列表。雖然函數確實有效,但我需要創建一個函數來獲得相同的結果,但可以使用任意數量的函數名。如何創建一個函數,該函數可以迭代數組中某個項目內的任意數量的函數?
例如,下面的函數必須在四個功能名稱
from operator import itemgetter
from itertools import groupby
from dictionary_functions import DictionaryFunctions
group_func = lambda iterable,key: [list(group) for key, group in groupby(sorted(iterable, key=itemgetter(key)), itemgetter(key))]
def add_one(i):
return i + 1
def subtract_one(i):
return i - 1
array = [{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':subtract_one,'f2':subtract_one,'f3':subtract_one,'f4':subtract_one},
{'f1':subtract_one,'f2':add_one,'f3':add_one,'f4':add_one}]
functions = ['f1','f2','f3','f4']
def function_iterate_over_array(array,functions,starting_value=0):
L = []
function_key_name = functions[0]
grouped_array = group_func(array,function_key_name)
for grouped_array_item in grouped_array:
function_one = grouped_array_item[0][function_key_name]
function_one_result = function_one(starting_value)
function_two_name = functions[1]
sub_grouped_array = group_func(grouped_array_item,function_two_name)
for sub_grouped_array_item in sub_grouped_array:
function_two = sub_grouped_array_item[0][function_two_name]
function_two_result = function_two(function_one_result)
function_three_name = functions[2]
sub_sub_grouped_array = group_func(sub_grouped_array_item,function_three_name)
for sub_sub_grouped_array_item in sub_sub_grouped_array:
function_three = sub_sub_grouped_array_item[0][function_three_name]
function_three_result = function_three(function_two_result)
function_four_name = functions[3]
sub_sub_sub_grouped_array = group_func(sub_sub_grouped_array_item,function_four_name)
for sub_sub_sub_grouped_array_item in sub_sub_sub_grouped_array:
function_four = sub_sub_sub_grouped_array_item[0][function_four_name]
function_four_result = function_four(function_three_result)
for dictionary_from_array in sub_sub_sub_grouped_array_item:
D = dict(dictionary_from_array.items()+{'result':function_four_result}.items())
L.append(D)
return L
L = function_iterate_over_array(array,functions)
#-->[{'f1': <function add_one at 0x1006d5cf8>, 'f2': <function add_one at 0x1006d5cf8>, 'f3': <function add_one at 0x1006d5cf8>, 'f4': <function add_one at 0x1006d5cf8>, 'result': 4}, {'f1': <function add_one at 0x1006d5cf8>, 'f2': <function add_one at 0x1006d5cf8>, 'f3': <function add_one at 0x1006d5cf8>, 'f4': <function add_one at 0x1006d5cf8>, 'result': 4}, {'f1': <function subtract_one at 0x100763ed8>, 'f2': <function add_one at 0x1006d5cf8>, 'f3': <function add_one at 0x1006d5cf8>, 'f4': <function add_one at 0x1006d5cf8>, 'result': 2}, {'f1': <function subtract_one at 0x100763ed8>, 'f2': <function subtract_one at 0x100763ed8>, 'f3': <function subtract_one at 0x100763ed8>, 'f4': <function subtract_one at 0x100763ed8>, 'result': -4}]
我想比function_iterate_over_array,可以採取任何數量的功能更好的功能來達到相同的結果。例如,我想以下工作:
array = [{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':subtract_one,'f2':subtract_one,'f3':subtract_one,'f4':subtract_one},
{'f1':subtract_one,'f2':add_one,'f3':add_one,'f4':add_one}]
function_iterate_over_array(array,['f1','f2'])
function_iterate_over_array(陣列,[ 'F1', 'F2'])應當返回以下:
[{'f1': <function add_one at 0x101a0fcf8>, 'f2': <function add_one at 0x101a0fcf8>, 'f3': <function add_one at 0x101a0fcf8>, 'f4': <function add_one at 0x101a0fcf8>, 'f5': <function add_one at 0x101a0fcf8>, 'result': 2}, {'f1': <function add_one at 0x101a0fcf8>, 'f2': <function add_one at 0x101a0fcf8>, 'f3': <function add_one at 0x101a0fcf8>, 'f4': <function add_one at 0x101a0fcf8>, 'f5': <function add_one at 0x101a0fcf8>, 'result': 2}]
我通過改變實現function_iterate_over_array以下幾點:
def function_iterate_over_array(array,functions,starting_value=0):
L = []
function_key_name = functions[0]
grouped_array = group_func(array,function_key_name)
for grouped_array_item in grouped_array:
function_one = grouped_array_item[0][function_key_name]
function_one_result = function_one(starting_value)
function_two_name = functions[1]
sub_grouped_array = group_func(grouped_array_item,function_two_name)
for sub_grouped_array_item in sub_grouped_array:
function_two = sub_grouped_array_item[0][function_two_name]
function_two_result = function_two(function_one_result)
for dictionary_from_array in sub_grouped_array_item:
D = dict(dictionary_from_array.items()+{'result':function_two_result}.items())
L.append(D)
return L
我也會喜歡以下工作
array = [{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one,'f5':add_one},
{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one,'f5':add_one}]
functions = ['f1','f2','f3','f4','f5']
function_iterate_over_array(array,functions)
特別是我正在尋找更好的方式來編寫上述函數,以便它可以採用任意數量的函數。
你想要什麼來實現這些功能呢? 'function_iterate_over_array(array,['f1','f2'])'的輸出應該是什麼? –
好點 - 只是更新我的問題,添加這些細節。 – Chris
概念上這個功能的目的是什麼? – Quelklef