這個需求比較奇怪,要求實現Sum和MagaSum函數,實現以下功能
Sum(1) =>1Sum(1,2,3) =>6MegaSum(1)() =>1MegaSum(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 sdef megaSum(s=None,l=[]): if not s: ret = Sum(*l) l.clear() # 清空,否則之后計算的結果值會不對。 return ret else: l.append(s) return megaSumprint(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實現累加函數的方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。
新聞熱點
疑難解答