函數語言程式設計——閉包與裝飾器
阿新 • • 發佈:2020-08-08
閉包:延伸了作用域的函式。
需求:
假如有個名為avg的函式,它的作用是計算不斷增加的系列值的均值;
使用類實現:
class Averager(): def __init__(self): self.series=[] def __call__(self,new_value): self.series.append(new_value) total=sum(self.seires) return total/len(self.series) >>>avg=Averager() >>>avg(10)10.0 >>>avg(11) 10.5 >>>avg(12) 11.0
函式式實現:
def make_averager(): series=[] def averager(new_value): series.append(new_value) total=sum(series) return total/len(series) return averager
>>>avg=make_averager()
>>>avg(10)
10.0
>>>avg(11)
10.5
這種方法,需要將所有值儲存在一個列表中,然後每次呼叫的時候使用sum,更好的實現方式是隻儲存目前的總值和元素的個數。
def make_averager(): count=0 total=0 def averager(new_value): nonlocal count,total count+=1 total+=new_value return total/count