对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库将URL转换为OpenCV格式的方法
Mar 27 Python
简单介绍Python中的JSON使用
Apr 28 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
Python和C/C++交互的几种方法总结
May 11 Python
使用Python实现简单的服务器功能
Aug 25 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
解决DataFrame排序sort的问题
Jun 07 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
Oct 14 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 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
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
js实现车辆管理系统
2020/08/26 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
复习Python中的字符串知识点
2015/04/14 Python
Python线程详解
2015/06/24 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
django和flask哪个值得研究学习
2020/07/31 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
自荐信格式
2013/12/01 职场文书
单位在职证明范本
2014/01/09 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
市场部规章制度
2014/01/24 职场文书
中学生自我鉴定
2014/02/04 职场文书
2014年端午节活动方案
2014/03/11 职场文书
浪费资源的建议书
2014/03/12 职场文书
小学生常见病防治方案
2014/06/06 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
房地产端午节活动方案
2014/08/24 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
公司聚餐通知
2015/04/22 职场文书
水浒传读书笔记
2015/06/25 职场文书
导游词之太湖
2019/10/08 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android