一、函數名 ? 函數名是?個變量, 但它是?個特殊的變量, 與括號配合可以執?函數的變量。 1. 函數名的內存地址 def func(): print("呵呵") print(func) 結果: <function func at 0x1101e4ea0> 2. 函數名可以賦值給其他變量 def func(): print("呵呵") print(func) # 把函數當成?個變量賦值給另?個變量 a = func # 函數調? func() a() 3. 函數名可以當做函數的參數 def func(): print("吃了么") def func2(fn): print("我是func2") fn() print("我是func2") # 把函數func當成參數傳遞給func2的參數fn. func2(func) 4. 函數名可以作為函數的返回值 def func_1(): print("這?是函數1") def func_2(): print("這?是函數2") print("這?是函數1") return func_2 # 執?函數1. 函數1返回的是函數2, 這時fn指向的就是上?函數2 fn = func_1() # 執?上?返回的函數 fn() 二、閉包 1. 定義 ? 如果在一個內部函數里,對在外部作用于(但不是在全局作用域)的變量進行引用,那么內部函數就被認為是閉包。 ? 閉包(Closure)是詞法閉包(Lexical Closure)的簡稱,是引用了自由變量的函數。這個被引用的自由變量將和這個函數一同存在,即使已經離開了創造它的環境也不例外。所以,閉包是由函數和與其相關的引用環境組合而成的實體。 ? 通俗的講就是:如果在一個內部函數里,對在外部作用域(但不是在全局作用域)的變量進行引用,那么內部函數就被認為是閉包(closure)。它只不過是個“內層”的函數,由一個名字(變量)來指代,而這個名字(變量)對于“外層”包含它的函數而言,是本地變量。 ? 閉包的主要用途:實現裝飾器 2. 閉包運用 閉包函數必須有內嵌函數 內嵌函數需要引用該嵌套函數上一級namespace中的變量 閉包函數必須返回內嵌函數 (1) 普通閉包 def func(a, b): def line(x): return a * x - b return line line = func(2, 3) print(line(5)) (2) 修改值閉包 def func(a, b): def line(x): nonlocal a a = 3 return a * x - b return line line = func(2, 3) print(line(5))
轉載自://www.cnblogs.com/hq82/p/11483338.html
国产无遮挡无码视频在线观看