對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的默認(rèn)參數(shù)。我們可以默認(rèn)參數(shù)值是None,當(dāng)主動傳入?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的,原因是只有當(dāng)不傳參數(shù)的時候才會清空l的內(nèi)容,這樣就會造成如
print(megaSum(1)(2)(3)) #<function megaSum at 0x7fb533743a60> print(megaSum(1)()) #7
計算結(jié)果不準(zhǔn)確。這個怎么解決,暫時還沒想到,如果有朋友知道可以告訴我。
以上這篇對Python實現(xiàn)累加函數(shù)的方法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何將Pandas運行結(jié)果導(dǎo)出為CSV格式文件
在數(shù)據(jù)分析與處理的世界里,Pandas?是一個不可或缺的工具,它提供了強大的數(shù)據(jù)處理功能,讓我們能夠輕松地清洗、轉(zhuǎn)換和分析數(shù)據(jù),本文將帶領(lǐng)大家了解如何使用?Pandas?將運行結(jié)果導(dǎo)出為?CSV?文件,并通過實際案例進行深入探討2024-05-05
Pycharm+Flask零基礎(chǔ)項目搭建入門的實現(xiàn)
本文主要介紹了Pycharm+Flask零基礎(chǔ)項目搭建入門的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
python 采用paramiko 遠(yuǎn)程執(zhí)行命令及報錯解決
這篇文章主要介紹了python 采用paramiko 遠(yuǎn)程執(zhí)行命令及報錯解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10
Numpy實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)(CNN)的示例
這篇文章主要介紹了Numpy實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)(CNN)的示例,幫助大家更好的理解和使用Numpy,感興趣的朋友可以了解下2020-10-10
python調(diào)用機器喇叭發(fā)出蜂鳴聲(Beep)的方法
這篇文章主要介紹了python調(diào)用機器喇叭發(fā)出蜂鳴聲(Beep)的方法,實例分析了Python調(diào)用winsound模塊的使用技巧,需要的朋友可以參考下2015-03-03
Python程序打包工具py2exe和PyInstaller詳解
這篇文章主要介紹了Python程序打包工具py2exe和PyInstaller詳解,如果可以提前將程序打包成 Windows平臺的 .exe 文件或者是Linux下的 .sh 腳本,那么使用起來就會方便很多,需要的朋友可以參考下2019-06-06

