使用不同的输入参数调用函数

时间:2017-05-15 12:07:48

标签: python function qgis

我对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

我对问题的看法是正确的还是我有某种基本的误解?

提前致谢 利奥

2 个答案:

答案 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