我有一个Python 3.2程序,可以计算未来任何时间段内投资的价值,它可以同时兼顾简单和复合的利益。问题是我有两个定义的函数,“main()”和“main2()”,第一个是简单的,第二个是复合兴趣。现在我想要做的是,给定用户的一些输入,程序在运行main()或main2()之间选择。关于如何做到这一点的任何想法?
答案 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构造来调用simple
或compound
计算例程
考虑到复合兴趣例程应该采用额外的参数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)
>>>