2015-11-05 60 views
-2

在下面的代码块中,我试图在我的input_strats数组中定义3个函数。为什么它只提示用户,然后打印“定义1”一次?谢谢!如何从input()函数体中读取?

prev_used = 3 
input_strats = [0 for x in range(prev_used)] 
for i in range(prev_used): 
    input_strats[i] = lambda alpha,beta,x,z,year: input('Expression here\n') 
    print("defined 1\n") 
+0

嗨凯文,对不起,我..我取得了一些进展,现在有一个更简洁的问题。我希望你能帮助! – user3587051

+0

好的,我删除了我的评论。 :) –

回答

1

车削功能到一个列表中很容易在Python:只列出函数名,就像这样:

def year1(a, b): 
    return 0.9*a + 0.1*b 

def year2(a, b): 
    return (a+b)/2.0 

def year3(a, b): 
    return a**2 + b**2 

func_list = [year1, year2, year3] 

for udf in func_list: 
    print udf 
    print udf(2, 5) 

给出你所期望的输出:

<function year1 at 0x1caa410> 
2.3 
<function year2 at 0x1caa500> 
3.5 
<function year3 at 0x1caa578> 
29 

转动将字符串转换为函数需要一点小技巧。您决定所需的输入符号,并获取表示函数定义左侧和右侧的字符串。然后,您可以创建一个通用函数,该函数返回一个构造函数,使用参数字典和要评估的文本作为函数定义。看到此前发布的编码细节: function from a string

+0

嗨,非常感谢你的回答!但有几个问题 - 在你的例子中,有3个功能。一般来说,有多少函数是输入 - 我是否要创建一个列表,然后添加函数?另外,使用链接帖子中的sympy,即使某些输入是数组,也仍然可以工作吗?再次感谢!! – user3587051

+1

您可以将任意数量的函数添加到列表中。我只用了3个,因为那是你提出问题的方式。是的,你可以使用列表和数组作为参数。 ** definition_to_function **只要求它构建的字符串最终是一个合法表达式来评估:你不能编写控制循环和if语句(尽管列表解析和if子句是合法的)。 – Prune

+0

有没有什么办法可以让我的Python程序运行纯Python代码?进入(功能)的策略可以包含if-else逻辑,这是相当重要的。这比我想象的要难得多!你认为另一种语言可能更适合这种事情吗?我只是有点失去了我可以从这里走的东西。 – user3587051