Python基础教程:嵌套函数、闭包
生活随笔
收集整理的這篇文章主要介紹了
Python基础教程:嵌套函数、闭包
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
嵌套函數
- 在函數中定義另一個函數稱為嵌套函數。
- 嵌套函數可以訪問包圍范圍內的變量。
嵌套函數的調用
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def func1():print('func1')def func2():print('func2')func1()執行結果:func1為什么函數func2沒有被執行?
任意一個函數定義完成之后,如果沒有人通過名字調用它,就永遠不會執行,如果需要執行可以按照如下方式進行調用:
def func1():print('func1')def func2():print('func2')func2()func1()執行結果:func1 func2nonlocal 關鍵字
內層函數改變外層函數變量用nonlocal, nonlocal不能定義新的外層函數變量,只能改變已有的外層函數變量,同時nonlocal不能改變全局變量。
不加nolocal關鍵字
添加nolocal關鍵字
def outer():a = 1def inner():nonlocal aa += 1print("Inner", a)inner()print("Outer", a)outer()執行結果:Inner 2 Outer 2閉包
閉包也稱詞法閉包,如果在一個內部函數里,對在外部作用域(但不是在全局作用域)的變量進行引用,那么內部函數就被認為是閉包(closure),這里說的作用域就是nonlocal。
通俗來講,閉包就是把一個函數(方法)作為一個變量來使用。
在python中創建閉包必須滿足的標準將在以下幾點:
- 必須有一個嵌套函數(函數內部的函數)。
- 嵌套函數必須引用封閉函數中定義的值。
- 閉包函數必須返回嵌套函數。
利用閉包實現一個計數器:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def counter():i = 0def nested():nonlocal ii += 1return ireturn nestedc = counter() print(c(),c(),c(),end=" ")返回的函數并沒有立刻執行,而是直到調用了c()才執行。
返回的函數中不要引用循環變量:
全部都是9!原因就在于返回的函數引用了變量i,但它并非立刻執行。等到3個函數都返回時,它們所引用的變量i已經變成了3,因此最終結果為9。
如果一定要使用循環變量,解決方法是再創建一個函數,用該函數的參數綁定循環變量當前的值,無論該循環變量后續如何更改,已綁定到函數參數的值不變:
def count():def f(j):def g():return j*jreturn gfs = []for i in range(1, 4):fs.append(f(i)) # f(i)立刻被執行,因此i的當前值被傳入f()return fsf1, f2, f3 = count()print(f1()) print(f2()) print(f3())執行結果:1 4 9總結
以上是生活随笔為你收集整理的Python基础教程:嵌套函数、闭包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3 ftp文件传输
- 下一篇: Python教程:切片、迭代、列表生成式