Python中是否有一种方法可以在对象上无数次地链接相同的函数?
例如。如果我想在对象fn
上将函数obj
链接两次,我将:
obj.fn(**kwargs1).fn(**kwargs2)
如果我想将fn
链接五次,我将:
obj.fn(**kwargs1).fn(**kwargs2).fn(**kwargs3).fn(**kwargs4).fn(**kwargs5)
答案 0 :(得分:3)
您实际上可以使用一个简单的for循环,该循环遍历参数列表,并将每个参数应用于对象,然后将结果重新分配给对象
for args in list_of_args:
obj = obj.fn(*args)
例如,我可以使用此逻辑如下链接string.replace
obj = 'aaaccc'
list_of_args = [['a','b'], ['c','d']]
for args in list_of_args:
obj = obj.replace(*args)
print(obj)
输出将是
bbbddd
与做'aaabbb'.replace('a','b').replace('c','d')
或者我们也可以使用一个递归方法,该方法接受对象,并使用一个计数器作为要应用的当前参数的索引,以及该函数需要运行的次数
#fn is either defined, or imported from outside
def chain_func(obj, counter, max_count):
#If counter reaches max no of iterations, return
if counter == max_count:
return obj
#Else recursively apply the function
else:
return chain_func(obj.fn(list_of_args[counter]), counter+1, max_count)
#To call it twice
list_of_args = [kwargs1, kwargs2]
chain_func(obj, 0, 2)
例如,我可以使用此逻辑来链接string.replace,如下所示
def chain_func(obj, counter, max_count):
#If counter reaches max no of iterations, return
if counter == max_count:
return obj
#Else recursively apply the function
else:
return chain_func(obj.replace(*list_of_args[counter]), counter+1, max_count)
list_of_args = [['a','b'], ['c','d']]
print(chain_func('aaaccc', 0, 2))
输出将是
bbbddd