對Python實現(xiàn)累加函數(shù)的方法詳解
這個需求比較奇怪,要求實現(xiàn)Sum和MagaSum函數(shù),實現(xiàn)以下功能
Sum(1) =>1 Sum(1,2,3) =>6 MegaSum(1)() =>1 MegaSum(1)(2)(3)() =>6
實際上Sum就是Python自建的sum函數(shù),它支持變參,變參怎么實現(xiàn),自然是*args,所以很容易寫出雛形:
Sum
def Sum(*args): count = 0 for i in args: count+=i return count
第二個函數(shù)就有點皮了,它要求有參數(shù)的時候,返回的值是一個函數(shù)的引用,無參數(shù)的時候,返回的是結(jié)果。
要實現(xiàn)可以有或無參數(shù),那么首想到的是Python的默認參數(shù)。我們可以默認參數(shù)值是None,當主動傳入?yún)?shù)時,返回一個函數(shù)的引用,否則,返回結(jié)果。這里用到了Python可變類型作為函數(shù)參數(shù)時的一些特性。代碼如下:
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() # 清空,否則之后計算的結(jié)果值會不對。 return ret else: l.append(s) return megaSum print(Sum(1,2,3)) print(megaSum(1)(2)(3)()) print(megaSum(1)())
實際上還是有一些Bug的,原因是只有當不傳參數(shù)的時候才會清空l的內(nèi)容,這樣就會造成如
print(megaSum(1)(2)(3)) #<function megaSum at 0x7fb533743a60> print(megaSum(1)()) #7
計算結(jié)果不準確。這個怎么解決,暫時還沒想到,如果有朋友知道可以告訴我。
以上這篇對Python實現(xiàn)累加函數(shù)的方法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 模擬員工信息數(shù)據(jù)庫操作的實例
下面小編就為大家?guī)硪黄狿ython 模擬員工信息數(shù)據(jù)庫操作的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10使用django-guardian實現(xiàn)django-admin的行級權(quán)限控制的方法
這篇文章主要介紹了使用django-guardian實現(xiàn)django-admin的行級權(quán)限控制的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10Python實現(xiàn)的刪除重復(fù)文件或圖片功能示例【去重】
這篇文章主要介紹了Python實現(xiàn)的刪除重復(fù)文件或圖片功能,結(jié)合實例形式分析了Python基于os與hashlib模塊針對文件的讀取、hash計算及重復(fù)性判定等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04python opencv圖像處理(素描、懷舊、光照、流年、濾鏡 原理及實現(xiàn))
這篇文章主要介紹了python 基于opencv對圖像進行各種處理,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12Python超越函數(shù)積分運算以及繪圖實現(xiàn)代碼
今天小編就為大家分享一篇Python超越函數(shù)積分運算以及繪圖實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11