在 python 中没有 for 循环的情况下重复函数几次
Repeat function a couple times without for loop in python
有没有办法在 Python 2 中快速重复一个函数(并生成一个元组)?
我希望语法类似于:
x, y = repeat(fxn, 2)
其中 fxn
不带参数,2
是输出元组的长度。
您可以使用生成器表达式:
x, y = (fxn() for _ in range(2))
递归方法
如果你坚持你真的想要一个 repeat
函数,它 以给定的次数重复调用一个函数 和 return这是所有调用的所有return值的元组,你可能会在递归中写:
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)
有没有办法在 Python 2 中快速重复一个函数(并生成一个元组)?
我希望语法类似于:
x, y = repeat(fxn, 2)
其中 fxn
不带参数,2
是输出元组的长度。
您可以使用生成器表达式:
x, y = (fxn() for _ in range(2))
递归方法
如果你坚持你真的想要一个 repeat
函数,它 以给定的次数重复调用一个函数 和 return这是所有调用的所有return值的元组,你可能会在递归中写:
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)