2014-02-07 96 views
1

我返回一個函數,使得:功能作爲返回值,Python的

add1 = make_adder(1) 
add1(5) 
#Result: 6 

make_adder(5)(10) 
#Result: 15 

我現在有

def make_adder(n): 

    return lambda n: n+1 

add1 = make_adder(1) 

**錯誤注意!! *

但 我有另一個類似的問題,我需要檢查數字匹配的地方。

def is_same(x,y): 
    return x == y 

def make_verifier(key): 
    return lambda n: is_same(262010771,key) 
check_password = make_verifier(262010771) 


如果鍵具有不同數量的,我應該得到一個假的,但我不明白的地方是錯誤的

+0

你應該提出另一個問題,因爲你已經接受了這個答案。 – warvariuc

回答

4

我想你想要的是:

def make_adder(n): 
    return lambda x: n + x 

據我所見,make_adder(n)應該返回一個函數,將n添加到調用它的東西。但是你所做的是返回lambda n: n+1,這是一個函數,將1加到調用它的東西上。

更多解釋:在第一個例子,add1make_adder(1)是添加1〜傳入的一個值的功能。在第二個例子中:make_adder(5)是通過自身的函數(這增加5),和10被傳遞到這個功能,得到5 + 10

make_adder由本身是一個函數創建了一個函數,增加了n至傳入的一個值。

1
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
>>> class Adder(int): 
...  def __call__(self, number): 
...    return self.__class__(self + number) 
... 
>>> Adder(5)(10) 
15 
>>> Adder(5)(10)(15) 
30 
>>> 
0
def is_same(x,y): 
    return x == y 

def make_verifier(key): 
    return lambda n: is_same(n,key) 
check_password = make_verifier(262010771) 

而不是把在數262010771的,你應該把n允許靈活地check_password(262010771)n後的變化,如果沒有它會是固定的,永遠是