对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中使用OpenCV进行人脸检测的例子
Apr 18 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
Python unittest单元测试框架总结
Sep 08 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
python的faker库用法
Nov 28 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
Dec 08 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
4种方法python批量修改替换列表中元素
Apr 07 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无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
JsRender实用入门教程
2014/10/31 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
Python计算一个文件里字数的方法
2015/06/15 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
群胜软件Java笔试题
2012/09/29 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
高校学生干部的自我评价分享
2013/11/04 职场文书
五一服装活动方案
2014/01/11 职场文书
美术教师自我鉴定
2014/02/12 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
秋季运动会开幕词
2015/01/28 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
JavaScript实现简单拖拽效果
2021/09/15 Javascript
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js