有没有更好的方法将函数一遍又一遍地应用于变量,而不必使用for循环(理想情况下也可以在标准库中使用)?我现在拥有的例子:
.timelinefull {
display: inline;
}
.timeline-inner {
display: inline;
}
.info {
display: inline;
padding-top: 10px;
position: absolute;
z-index: 100;
-webkit-transition:all linear 0.3s;
transition:all linear 0.3s;
}
.line {
box-shadow: 0 0 0 2px rgba(0,0,0,.05);
margin-left: -5px;
margin-right: -5px;
}
.info.ng-hide {
opacity:0;
}
a:link {
text-decoration: none;
}
我喜欢的是喜欢
def simulation():
wealth = 0
for i in range(1000):
wealth = gamble(wealth)
return wealth
答案 0 :(得分:2)
我能想到的另一个选择是将 itertools.repeat
与 map
一起使用:
from itertools import repeat
wealth = 0
# dummy gable function
def gamble(wealth):
return wealth
z = map(gamble, repeat(wealth, times=1000))
您仍需要遍历它(或在其上调用list()
)以使其执行。
如果函数应该对相同的值起作用。如果你需要它多次调用自己,你也可以使用一个装饰器(或reduce
但是自从@Austin这样做之后就没有必要添加它了:
def apply(f, times=10):
def func(*args, **kwargs):
nonlocal times
times -= 1
if times:
return func(f(*args, **kwargs))
return func
@apply
def foo(val):
val += 1
print(val, end = " ")
return val
foo(10)
11 12 13 14 15 16 17 18 19
答案 1 :(得分:1)
# python 3
from functools import reduce
return reduce(lambda w,i: gamble(w), range(1000), 0)
答案 2 :(得分:1)
不幸的是,没有内置或标准的库函数可以完成您想要的功能。
虽然您可以扭曲现有函数以使其工作,但for
循环可能比所需的代码更具可读性。就我而言,我非常喜欢阅读您当前的代码而不是Austin Hasting非常聪明的版本。我可以立即理解for
循环,reduce
调用和忽略其第二个参数的lambda
都需要更多的思考。
因此,在“简化”代码之前要仔细考虑,并确保简化并不会使代码更难理解。