对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 相关文章推荐
Python3基础之条件与循环控制实例解析
Aug 13 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python max内置函数详细介绍
Nov 17 Python
python树莓派红外反射传感器
Jan 21 Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 Python
pytorch 输出中间层特征的实例
Aug 17 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
Python生成器常见问题及解决方案
Mar 21 Python
解决paramiko执行命令超时的问题
Apr 16 Python
python 实现控制鼠标键盘
Nov 27 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面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
简单介绍Python中的struct模块
2015/04/28 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
园艺师求职信
2014/03/10 职场文书
我爱我家教学反思
2014/05/01 职场文书
银行进社区活动总结
2014/07/07 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP