2015-11-05 61 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