對Python實現累加函式的方法詳解

2022-09-28 20:06:26 字數 1061 閱讀 2636

這個需求比較奇怪,要求實現sum和magasum函式,實現以下功能

sum(1) =>1

sum(1,2,3) =>6

mega程式設計客棧sum(1)() =>1

megasum(1)(2)(3)() =>6

實際上sum就是python自建的sum函式,它支援變參,變參怎麼實現,自然是*args,所以很容易寫出雛形:

sumdef 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)) #

print(megasum(1)()) #7

計算結果不準確。這個怎麼解程式設計客棧決,暫時還沒想到,如果有朋友知道可以告訴我。

本文標題: 對python實現累加函式的方法詳解

本文位址: /jiaoben/python/250845.html

對pandas replace函式的使用方法小結

語法 replace self,to replace none,value none,inplace false,limit none,regex false,method pad axis none 使用方法如下 import numpy as np import pandas as pd df ...

mysql 開窗函式 累加 mysql實現開窗函式

學習過oracle的應該知道,oracle中的分析函式功能十分強大,包括mssql postgresql等資料庫都支援開窗函式。然而mysql至今都沒有提供這樣的功能,今天就來 下用mysql實現一些開窗功能需求。實驗資料 表sale month user id amount 201601 1 50...

對python 合併 累加兩個dict的例項詳解

比如說有兩個dict x和y 1.比較快的自己寫的,def merge dict x,y for k,v in x.items www.cppcns.com 程式設計客棧if k in y.keys buffer k v www.cppcns.com else buf v 2.呼叫api,這個慢一點...