对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中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
Python pickle模块用法实例
Apr 14 Python
整理Python 常用string函数(收藏)
May 30 Python
简单实现Python爬取网络图片
Apr 01 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
Python开发网站目录扫描器的实现
Feb 21 Python
在django admin中添加自定义视图的例子
Jul 26 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
Python远程方法调用实现过程解析
Jul 28 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
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python3.6简单操作Mysql数据库
2017/09/12 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
Java基础知识面试题
2014/03/25 面试题
旅行社各个岗位职责
2014/03/15 职场文书
毕业欢送会致辞
2015/07/29 职场文书
高中班长竞选稿
2015/11/20 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
浅谈Vue的computed计算属性
2022/03/21 Vue.js
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python