对Python实现累加函数的方法详解


Posted in Python onJanuary 23, 2019

这个需求比较奇怪,要求实现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实现累加函数的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现二维有序数组查找的方法
Apr 27 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
PyQt5每天必学之单行文本框
Apr 19 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
django实现后台显示媒体文件
Apr 07 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
pytorch 一行代码查看网络参数总量的实现
May 12 Python
python可视化之颜色映射详解
Sep 15 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 #Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 #Python
selenium+python自动化测试之环境搭建
Jan 23 #Python
在python带权重的列表中随机取值的方法
Jan 23 #Python
Appium+Python自动化测试之运行App程序示例
Jan 23 #Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 #Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 #Python
You might like
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
数控专业应届生求职信
2013/11/27 职场文书
酒店管理求职信范文
2014/04/06 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python