2013-03-26 82 views
1

[編輯] 例如,我有一個函數,我有不同的y值。一個優雅的方式,使python中的函數列表

def h(x): 
    return x*y 

我試着在我的名單追加H(X),稱Y = 3。但是,當我改變y以另一種價值和追加H(X),又在我的名單中,我的第一個小時Y( x)也發生了變化。

例子:

>> func_list = [] 
>> def h(x): 
>> return x*y 
>> y = 1 
>> func_list.append(lambda x:h(x)) 
>> func_list[0](5) 
>> 5 
>> y = 2 
>> func_list.append(lambda x:h(x)) 
>> func_list[1](5) 
>> 10 
>> func_list[0](5) 
>> 10 

有沒有一個很好的辦法做到這一點,因爲我不能讓大量的H(X)的不同y值?

+1

請提供多一點的代碼。 – whatyouhide 2013-03-26 14:54:16

+2

你的問題還不清楚。你能提供一個簡短的**完整的**程序嗎?這就是你想要的嗎? http://SSCCE.org – 2013-03-26 14:55:53

+0

我的代碼(來自原始帖子)實際上就是這樣。它只是執行y的變化值,影響已經在列表中的h(x)中y的先前值。無論如何,那裏。我編輯它。 – skinnyas123 2013-03-26 15:11:38

回答

5

當你的y probobly生活在一個封閉(BTW:怎麼樣一個工作最小exmple?),你必須環繞它的一層:

def mk_func(y): 
    def h(x): 
     return x * y 
    return h 

然後

my_funcs=[mk_func(i) for i in (1, 3, 4, 7)] 

+0

這工作。謝謝! – skinnyas123 2013-03-26 14:56:30

4

您可以使用functools.partial此:

import functools 

def h(y, x): 
    return x * y 

func_list = [functools.partial(h, y) for y in [1, 3, 5, 7, 9]] 
print [f(3) for f in func_list] 
+0

此處列表的製作是[列表理解](http://www.youtube.com/watch?v=pShL9DCSIUw)。 – 2013-03-26 14:56:34

相關問題