对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脚本实现下载合并SAE日志
Feb 10 Python
python获取图片颜色信息的方法
Mar 18 Python
Python中的getopt函数使用详解
Jul 28 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
Python实现决策树C4.5算法的示例
May 30 Python
浅析python中的迭代与迭代对象
Oct 08 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
Python文本文件的合并操作方法代码实例
Mar 31 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
一个好用的分页函数
2006/11/16 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
js实现图片360度旋转
2017/01/22 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
ES6中let 和 const 的新特性
2018/09/03 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python中的Numpy入门教程
2014/04/26 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
Gap英国官网:Gap UK
2018/07/18 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
新大陆软件面试题
2016/11/24 面试题
企业文化宣传标语
2014/06/09 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
python中的None与NULL用法说明
2021/05/25 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python