2013-03-12 122 views
1

所以我必須做以下函數 - >迭代。在第一次調用時,它應該在第三個func.func上返回第二個func的身份。 任何想法如何做到這一點?我試圖尋找在ITER下一個方法BUF失敗:(迭代函數的Python迭代器

>>> def double(x): 
     return 2 * x 

>>> i = iterate(double) 
>>> f = next(i) 
>>> f(3) 
3 
>>> f = next(i) 
>>> f(3) 
6 
>>> f = next(i) 
>>> f(3) 
12 
>>> f = next(i) 
>>> f(3) 
24 

回答

2

像這樣的東西可能:

>>> import functools 
>>> def iterate(fn): 
    def repeater(arg, _count=1): 
     for i in range(_count): 
      arg = fn(arg) 
     return arg 
    count = 0 
    while True: 
     yield functools.partial(repeater, _count=count) 
     count += 1 


>>> i = iterate(double) 
>>> f, f2, f3, f4 = next(i), next(i), next(i), next(i) 
>>> f(3), f2(3), f3(3), f4(3) 
(3, 6, 12, 24) 
>>> f(3), f2(3), f3(3), f4(3) 
(3, 6, 12, 24) 

所以你編寫調用原函數的次數的函數指定爲參數,並且您預先綁定了計數參數。

+0

非常感謝!您幫了我很多! – 2013-03-13 08:23:36