2012-07-30 58 views
1

我知道函數functools,但是它在普通python程序(不是:Haskell,Erlang,Clojure等)中編寫函數以在Python中返回函數的常見程度如何?返回函數的python函數

例如:

>>> def returnfunk(xs): 
...  return lambda x: list(filter(lambda y: x == y, xs)) 
... 
>>> fn = returnfunk(["cat", "dog", "horse"]) 
>>> 
>>> (fn("cow") == []) == True 
True 
>>> (fn("cat") == ['cat']) == True 
True 
>>> 
>>> list(filter(fn, ["zebra", "elephant", "dog", "parrot", "cat"])) 
['dog', 'cat'] 

是它意味着爲real (python) world或更多的愛好,學歷,興趣?

+0

這很普遍,函數只是另一種對象。你寫回來的函數是鈍的,你會使用列表理解。 – Julian 2012-07-30 19:49:59

+0

這不是一個真正可以回答的問題......「普通」如何定義?答案的定義可能與你自己的不同。 – Ben 2012-07-30 19:51:52

+0

我想我的意思是 - 這是Python社區普遍支持的方法嗎?我明白,事情可以用功能的方式來完成,但我不知道可插拔接口的例子。 – beoliver 2012-07-30 19:54:49

回答

3

裝飾者@classmethod@staticmethod是兩個例子。

+3

每個裝飾者都是一個例子。 – Julian 2012-07-30 19:50:20

1

它在現實世界中非常使用。我想到的第一件事是具有可插入接口的API。大多數通過實施功能註冊表然後查找該註冊表進行操作。

1

它們非常有用。函數式編程一直都在使用這種類型的東西,它可以大大簡化如上面所用的方式(例如filter)的任務(儘管有很多簡單的方法可以完成您在此嘗試的操作)。

1

這意味着靈活性。使用函數返回函數可以做很多事情,比如曲風,組合和裝飾。當然,它可以讓你玩弄閉合,這讓你在編碼方面有很大的靈活性。無論您是否需要,都取決於您的應用程序。