一次又一次地将函数应用于变量

时间:2016-01-24 22:03:00

标签: python

有没有更好的方法将函数一遍又一遍地应用于变量,而不必使用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

3 个答案:

答案 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都需要更多的思考。

因此,在“简化”代码之前要仔细考虑,并确保简化并不会使代码更难理解。