Python实现累加函数

标签: python
27人阅读 评论(0) 收藏 举报
分类:

这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能

Sum(1) =>1
Sum(1,2,3) =>6
MegaSum(1)() =>1
MegaSum(1)(2)(3)() =>6

实际上Sum就是Python自建的sum函数,它支持变参,变参怎么实现,自然是*args,所以很容易写出雏形:
Sum

def Sum(*args):
    count = 0
    for i in args:
        count+=i
    return count

第二个函数就有点皮了,它要求有参数的时候,返回的值是一个函数的引用,无参数的时候,返回的是结果。
要实现可以有或无参数,那么首想到的是Python的默认参数。我们可以默认参数值是None,当主动传入参数时,返回一个函数的引用,否则,返回结果。这里用到了Python可变类型作为函数参数时的一些特性。代码如下:

def Sum(*args):
    s = 0
    for i in args:
        s+=i
    return s

def megaSum(s=None,l=[]):
    if not s:
        ret = Sum(*l)
        l.clear() # 清空,否则之后计算的结果值会不对。
        return ret
    else:
        l.append(s)
        return megaSum
print(Sum(1,2,3))
print(megaSum(1)(2)(3)())
print(megaSum(1)())

实际上还是有一些Bug的,原因是只有当不传参数的时候才会清空l的内容,这样就会造成如

print(megaSum(1)(2)(3)) #<function megaSum at 0x7fb533743a60>
print(megaSum(1)()) #7

计算结果不准确。这个怎么解决,暂时还没想到,如果有朋友知道可以告诉我。

查看评论

Python实现微信自动化

-
  • 1970年01月01日 08:00

利用 SUM OVER 开窗函数实现累加计算

今天在坛子里发现一个很有意思的贴子: 点击打开链接 如上图所示,【需求数量】不变,【已满足数量】按照从序号大到小的顺序,从最小的【序号】中取值,使其等于【需求数量】 举个例子:比如物料号为1的,有...
  • yenange
  • yenange
  • 2017-09-02 22:46:19
  • 431

python卷积运算,不用函数

  • 2017年11月22日 17:21
  • 3KB
  • 下载

MATLAB概率分布函数

  • 2009年06月24日 20:44
  • 48KB
  • 下载

sqlserver function(函数) 字符串累加

ALTER FUNCTION dbo.getsearchname(@partnumber varchar(30)) RETURNS varchar(8000) AS BEGIN decl...
  • wslyy99
  • wslyy99
  • 2012-03-23 09:53:28
  • 1432

MATLAB中带有符号变量的阶乘、累加函数的表达与求解

[原文 http://blog.sina.com.cn/s/blog_51b4da5a01018ve7.html]1、求n的阶乘,方法如下: a、factorial(n) b、gamma(n+1)...
  • u011491972
  • u011491972
  • 2017-01-08 10:50:53
  • 3724

mysql之累加

SET @add_sal=0; SELECT deptno, empno, ename, sal, @add_sal := @add_sal + sal AS add_sal FROM emp...
  • jgmydsai
  • jgmydsai
  • 2014-10-11 20:03:15
  • 4880

Matlab工具箱总汇

  • 2013年11月10日 19:46
  • 376KB
  • 下载

SQL 分析函数累加

select ROW_INDEX,DeptName,Qty,CurrentPercentage,sum(Qty)over(order by ROW_INDEX rows 3 preceding) a...
  • HelisG
  • HelisG
  • 2017-06-20 17:48:29
  • 400

sas 累加函数

data a; input x; cards; 1 2 3 2 1 2 3 ; data b; set a; y+x; retain y; if y > 5 then do; y =0; end; ...
  • aositawei
  • aositawei
  • 2015-06-16 23:35:45
  • 482
    个人资料
    持之以恒
    等级:
    访问量: 11万+
    积分: 2038
    排名: 2万+
    最新评论