2015-06-14 76 views
1

有沒有辦法在Python 2中快速重複一個函數(並生成一個元組)?在python中重複函數幾次而沒有for循環

我希望的語法看起來像:

x, y = repeat(fxn, 2) 

其中fxn沒有參數,2是輸出元組的長度。

+3

爲什麼* 「沒有for循環」 *?你究竟在努力實現什麼? – jonrsharpe

+0

'fxn'函數返回的內容。單一的價值?每次通話都有不同的值? – dlask

+1

'x,y = fxn(),fxn()'有什麼問題? –

回答

5

您可以使用生成器表達式:

x, y = (fxn() for _ in range(2)) 
+5

這是如何*「沒有for循環」*? – jonrsharpe

+2

這是一個生成器表達式,而不是for-loop。 – Daniel

+1

鑑於你仍然遍歷'range(2)'(就像你用'for _ in range(2):...一樣......')這是一個沒有區別的區別,不是嗎? – jonrsharpe

3

遞歸方法

如果你堅持你真的想要一個repeat功能,在時間給定數量的反覆調用的函數, 返回來自所有調用的所有返回值的元組,您可能會寫入遞歸:

x, y = repeat(fxn, 2) #repeat fxn 2 times, accumulate the return tuples 

所以

def repeat(f,n): 
    ret, n = (f(),), n-1 
    if n>0: 
     ret = ret + (repeat(f,n)) 
    return ret 

爲了測試它是否工作

給你定義一個測試功能:

def F(): 
    return 'foo' 

測試重複

a = repeat(F,1) # a <-- 'foo' 
a, b = repeat(F,2) # a = 'foo', b = 'foo' 
a, b, c, d, e = repeat(F,5) # returns tuples of ('foo','foo','foo','foo','foo') correctly 

賓果!

0

只是另一種方式

import itertools 
result = itertools.imap(lambda _:fxn(), range(0, 2)