有沒有辦法在Python 2中快速重複一個函數(並生成一個元組)?在python中重複函數幾次而沒有for循環
我希望的語法看起來像:
x, y = repeat(fxn, 2)
其中fxn
沒有參數,2
是輸出元組的長度。
有沒有辦法在Python 2中快速重複一個函數(並生成一個元組)?在python中重複函數幾次而沒有for循環
我希望的語法看起來像:
x, y = repeat(fxn, 2)
其中fxn
沒有參數,2
是輸出元組的長度。
您可以使用生成器表達式:
x, y = (fxn() for _ in range(2))
這是如何*「沒有for循環」*? – jonrsharpe
這是一個生成器表達式,而不是for-loop。 – Daniel
鑑於你仍然遍歷'range(2)'(就像你用'for _ in range(2):...一樣......')這是一個沒有區別的區別,不是嗎? – jonrsharpe
遞歸方法
如果你堅持你真的想要一個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
賓果!
只是另一種方式
import itertools
result = itertools.imap(lambda _:fxn(), range(0, 2)
爲什麼* 「沒有for循環」 *?你究竟在努力實現什麼? – jonrsharpe
'fxn'函數返回的內容。單一的價值?每次通話都有不同的值? – dlask
'x,y = fxn(),fxn()'有什麼問題? –