对Python实现累加函数的方法详解
2019-01-27 12:07
507 查看
这个需求比较奇怪,要求实现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使用函数默认值实现函数静态变量的方法
- Python的hasattr() getattr() setattr() 函数使用方法详解
- python实现TCP服务器端与客户端的方法详解
- Python实现屏幕截图的代码及函数详解
- Python的hasattr() getattr() setattr() 函数使用方法详解
- 利用Python代码实现数据可视化的5种方法详解
- python中getattr函数使用方法 getattr实现工厂模式
- Python实现堆排序的方法详解
- Python语言学习讲解三:详解Python中的split()函数的使用方法
- Python实现Logger打印功能的方法详解
- Python_LDA实现方法详解
- Python实现对一个函数应用多个装饰器的方法示例
- Java程序中实现调用Python脚本的方法详解
- 举例详解Python中的split()函数的使用方法
- 举例详解Python中的split()函数的使用方法
- Python实现数据库编程方法详解
- Python实现优先级队列结构的方法详解
- Python函数的周期性执行实现方法
- Python学习之功能函数使用方法详解