我对python很新,但我找不到 我有一个河网,我想用几个算法。
第一步是加载数据并以我可以使用的方式处理它。 我想要一个加载和预处理数据的函数,然后调用另一个函数来处理它。
根据我想调用的算法,我需要不同的输入参数。 我需要将算法的参数提供给加载算法。
函数是否有办法以函数知道哪个参数用于算法?
代码知道" calc_network(data,algorithm3,inputB)"按我想要的方式工作。
我看到的方式我需要输入" calc_network(data,algorithm3,0,inputB,0)"。
所以我需要为我不需要的值设置空值?
def calc_network(data, algorithm, inputA, inputB, inputC):
def processData(data)
return processedData
def algorithm1(processedData, inputA, inputB)
return results
def algorithm2(processedData, inputA, inputC)
return results
def algorithm3(processedData, inputB)
return results
return results, processedData
我对问题的看法是正确的还是我有某种基本的误解?
提前致谢 利奥
答案 0 :(得分:1)
使用functools.partial
:
from functools import partial
def algorithm1(data, input_a, input_b):
return 'algorithm1 result'
def algorithm2(data, input_a, input_c):
return 'algorithm2 result'
def algorithm3(data, input_b):
return 'algorithm3 result'
def calc_network(data, algorithm):
def process_data(data):
return 'processed {}'.format(data)
processed_data = process_data(data)
return algorithm(processed_data), processed_data
print(calc_network('data1', partial(algorithm1, input_a=1, input_b=2)))
print(calc_network('data2', partial(algorithm2, input_a=1, input_c=3)))
print(calc_network('data3', partial(algorithm3, input_b=2)))
这将产生:
('algorithm1 result', 'processed data1')
('algorithm2 result', 'processed data2')
('algorithm3 result', 'processed data3')
答案 1 :(得分:0)
你不会嵌套这样的功能。您将拥有多个函数,并从父函数调用子函数。
def functionA(foo):
do stuff
def functionB(foo):
do stuff
def functionC(foo):
do stuff using functionA or functionB
如果你想让你的功能保持与你所说的类似的结构,你可能想要考虑课程。
class Foo(object):
def __init__(self, your, data, arguments):
Determine which function to send data to
self.data = call function(s) and get the data.
def algorithm1(self, processedData, inputA, inputB)
return results
def algorithm2(self, processedData, inputA, inputC)
return results
def algorithm3(self, processedData, inputB)
return results
这样,当您需要数据时,可以通过实例化类来完成。
foo = Foo(your, data, arguments)
然后您的结果可以通过以下方式访问:
foo.data