程序如何在python中选择两个函数?

时间:2013-01-20 15:55:17

标签: python function python-3.x

我有一个Python 3.2程序,可以计算未来任何时间段内投资的价值,它可以同时兼顾简单和复合的利益。问题是我有两个定义的函数,“main()”和“main2()”,第一个是简单的,第二个是复合兴趣。现在我想要做的是,给定用户的一些输入,程序在运行main()或main2()之间选择。关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:7)

首先,给你的功能更好的名字。然后使用映射:

def calculate_compound(arg1, arg2):
    # calculate compound interest

def calculate_simple(arg1, arg2):
    # calculate simple interest

functions = {
    'compound': calculate_compound,
    'simple':   calculate_simple
}

interest = functions[userchoice](inputvalue1, inputvalue2)

因为Python函数是一等公民,所以你可以将它们存储在python字典中,使用密钥查找它们,然后调用它们。

答案 1 :(得分:2)

您可以使用解决方案作为Martijn的海报,但您也可以使用if/else Python构造来调用simplecompound计算例程

考虑到复合兴趣例程应该采用额外的参数n,即兴趣频率计算,因此根据参数长度可以切换函数调用。

此外,您的驱动程序例程应接受变量参数来接受两种函数类型的参数

>>> def calc(*args):
    if len(args) == 3:
        return calc_simple(*args)
    elif len(args) == 4:
        return calc_compund(*args)
    else:
        raise TypeError("calc takes 3 or 4 arguments ({} given)".format(len(args)))


>>> def calc_compund(*args):
    P, r, n, t = args
    print "calc_compund"    
    #Your Calc Goes here


>>> def calc_simple(*args):
    P, r, t = args
    print "calc_simple"
    #Your Calc Goes here


>>> calc(100,10,2,5)
calc_compund
>>> calc(100,10,5)
calc_simple
>>> calc(100,10)

Traceback (most recent call last):
  File "<pyshell#108>", line 1, in <module>
    calc(100,10)
  File "<pyshell#101>", line 7, in calc
    raise TypeError("calc takes 3 or 4 arguments ({} given)".format(len(args)))
TypeError: calc takes 3 or 4 arguments (2 given)
>>>