452、Java框架106 -【MyBatis - 多對多】 2020.12.24
阿新 • • 發佈:2020-12-26
* 函式物件:可以將定義在函式內的函式返回到全域性使用,從而打破函式的層級限制。
* 名稱空間與作用域:作用域關係在函式定義階段時就已經固定死了。與呼叫位置無關,即在任意位置呼叫函式都需要跑到定義函式時找到作用域關係
def f1(): x = 1 def inner(): print(x) return inner func = f1() x = 2 def f2(): x = 3 func() f2()outputs
1
閉包:閉是封閉(函式內部函式),包是包含(該內部函式對外部作用域而非全域性作用域的變數的引用)。閉包指的是:函式內部函式對外部作用域而非全域性作用域的變數的引用。
提示:之前外面都是通過引數將外部的值傳給函式,閉包提供了另一種思路,包起來嘍,包起呦,包起來哇。
def outter(): xoutputs= 1 def inner(): print(x) return inner f = outter() def f2(): x = 2 f() f2()
1
為函式傳參的方式二:包給函式
先定義一個有參函式,在這個有參函式內定義一個無參函式,然後在無參函式內寫入需要的程式碼塊,然後返回無參函式的函式名,這樣就可以在函式外部,將有參函式賦值給變數名的方式來進行多次呼叫。
def outter(x): x = 1 def inner(): print(x)Outputsreturn inner f = outter(6) f() f() # 檢視閉包的元素 print(f"f.__closure__[0].cell_contents:{f.__closure__[0].cell_contents}")
macname@MacdeMacBook-Pro py % python3 cccccc.py 1 1 f.__closure__[0].cell_contents:1 macname@MacdeMacBook-Pro py %