对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 不关闭控制台的实现方法
Oct 23 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
django表单实现下拉框的示例讲解
May 29 Python
Python绘制的二项分布概率图示例
Aug 22 Python
Django restframework 源码分析之认证详解
Feb 22 Python
python3利用Socket实现通信的方法示例
May 06 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
Python实现图片添加文字
Nov 26 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 Python
浅析Python中的随机采样和概率分布
Dec 06 Python
详解OpenCV曝光融合
Apr 29 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
浅谈js原生拖放
2016/11/21 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
Vue发布项目实例讲解
2019/07/17 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
numpy中的高维数组转置实例
2018/04/17 Python
多个应用共存的Django配置方法
2018/05/30 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
利用Python优雅的登录校园网
2020/10/21 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
优秀员工评优方案
2014/06/13 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
毕业生找工作求职信
2014/08/05 职场文书
校友回访母校寄语
2015/02/26 职场文书
小学班级口号大全
2015/12/25 职场文书