Python修饰器小应用——级数求和算法简化

假设我们遇到了

    \[\sum_{n=1}^{\infty} \frac{3n+5}{3^n}\]

这样一个东西,我们算出了结果,并且需要用python验算。

通过抽象,我们需要计算

    \[\sum_{n=1}^{\infty} f(x,n)\]

用普通的for语句比较麻烦,正巧python有一个叫做修饰器的东西可以简化运算,我们每次只需要把sigma内部的公式输入即可。

def series_sum(start):
    def _sum(func):
        def wrapper(x):
            ret = 0
            i = start
            while True:
                if (i>10000):
                    break
                t = func(x,i)
                if (i>100 and t==0):
                    break
                ret += t
                i += 1
            return ret
        return wrapper
    return _sum


if __name__ == '__main__':
    @series_sum(1)
    def func_a(x,n=None):
        return (3*n+5)/x**n
    @series_sum(0)
    def func_b(x,n=None):
        return x**n;
    print(func_a(3))
    print(func_b(0.5))

series_sum为一个修饰器,只用输入一次,之后我们只需要将我们的f(x,n)用series_sum函数修饰就好了,超级优美!

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据