对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 根据pid杀死相应进程的方法
Jan 16 Python
Python制作Windows系统服务
Mar 25 Python
Python中with及contextlib的用法详解
Jun 08 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 Python
Python 高级库15 个让新手爱不释手(推荐)
May 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关联数组使用技巧
2015/12/25 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
JQuery中使用Ajax赋值给全局变量异常的解决方法
2014/01/10 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
python实现自动更换ip的方法
2015/05/05 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
Html5之title吸顶功能
2018/06/04 HTML / CSS
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
学生思想表现的评语
2014/01/30 职场文书
聚美优品的广告词
2014/03/14 职场文书
倡议书范文
2014/04/16 职场文书
环保标语口号
2014/06/13 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript