2013-11-10 89 views
0

我有一個函數內從這樣調用函數:的Python:從一個函數輸出數據的步驟調用一個函數

def counter(number): 
    number = number + 1 
    return number 

def iterator(iteration, function): 
    for i in range(iteration): 
    mfunction = function 
    output = mfunction() 
    return output 

我想稱之爲是這樣的:

number = 0 
number = iterator(5, partial(counter, number)) 
print number 

這返回1,因爲它應該返回5,因爲計數函數應該被調用5次。
我意識到,不知何故數據輸出不正確,但我不知道如何退出for循環。

這個問題看起來是多餘的,因爲我可以很容易地做一些事情,如:

for i in range(5): 
    number = counter(number) 

但後者的例子擊敗這個計劃的目的。

我認爲問題是我需要在計數器函數中創建一個參數來說明迭代器函數。但在我的實際程序中的問題是,我將不得不修改許多函數來做到這一點,我試圖避免這一點。

我不是那麼熟悉調用的函數和任何幫助裏面的功能將不勝感激,

+1

'數=數目+不1'只改變參數'number',而不是'函數外number'。 – falsetru

+0

'partial(counter,number)'相當於'partial(counter,0)'。所以代碼調用'counter(0)'5次。 – falsetru

+0

是的,我只是不知道如何獲得該號碼 –

回答

2

partial(counter, number)相當於partial(counter, 0)。所以代碼調用counter(0) 5次。在`counter`功能

def counter(number): 
    number = number + 1 
    return number 

def iterator(iteration, function, arg): 
    for i in range(iteration): 
     arg = function(arg) 
    return arg 

number = 0 
number = iterator(5, counter, number) 
print number # => 5 

def counter(number, delta): 
    number = number + delta 
    return number 

def iterator(iteration, function, *args): 
    args = list(args) 
    for i in range(iteration): 
     ret = function(*args) 
     args[0] = ret 
    return ret 

number = 0 
number = iterator(5, counter, number, 5) 
print number # => 25 
+0

這工作,但參數的數量是可變的,這就是爲什麼我使用部分。 –

+0

@NickSimas,參數的數量和返回值的項目總數是否相等? – falsetru

+0

返回總是1的值。爭論各異。 –

相關問題