Python 閉包 返回函數

# -*- coding:utf-8 -*-
# 返回一個函數時,牢記該函數並未執行,返回函數中不要引用任何可能會變化的變量
# 閉包的用處/優點有兩條:
# 從函數外可以讀取函數內部的變量
# 讓這些變量的值始終保持在內存中(也可以理解爲保留當前運行環境)


def createcounter():
   s = 0
   f = [0]

   def counter():
      # 閉包中內函數修改外函數局部變量:
      # nonlocal 關鍵字聲明 一個變量, 表示這個變量不是局部變量空間的變量,需要向上一層變量空間找這個變量
      # 以把閉包變量改成可變類型數據進行修改,比如列表。
      f[0] = f[0] + 1
      print(f[0])
      nonlocal s
      s = s + 1
      return s
   return counter


counterA = createcounter()
print(counterA(), counterA(), counterA(), counterA())
counterB = createcounter()
if[counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
   print('測試通過!')
else:
   print('測試失敗!')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章