閉包和裝飾器(一)
阿新 • • 發佈:2018-12-10
什麼是閉包?
我們看下閉包的結構:
外部函式:外部函式返回內部函式的引用
內部函式:內部函式使用了外部函式的引用或者變數
將這種結構的整體稱為閉包
1、定義閉包
def fun(num):
def inner():
print("內部函式使用了外部函式的變數 % d" %num)
return inner
ret = fun(50)
ret()
2、通過閉包計算斜線中的點
def create_line(k ,b): def line(x): print(k*x + b) return line # 建立一條斜線:斜率為1,截距為2 line_1_2 = create_line(1, 2) # line_1_2(1)中的1相當於給line傳參 line_1_2(1)
3、在閉包中修改外部函式的變數
在閉包中修改外部函式的變數就需要涉及到另外兩個知識點:
3.1 global
什麼時候使用global引數?
gcount=0
def gcount_test():
# 因為在函式中修改了全域性變數gcount,但是又沒有使用global,所以會報錯
# 如果不修改gcount的值,那麼仍然可以在函式中列印gcount引數
global gcount
gcount+=1
print(gcount)
gcount_test()
3.2 nonlocal
# nonlocal關鍵字用來在函式或其他作用域中使用外層(非全域性)變數 def fun(num): start=num def inner(): nonlocal=start start=100 print("列印輸出外部函式的引數%d"%num) print("列印輸出外部函式的變數%d"%start) return inner ret=fun(200) ret()