閉包函式:
什麼是閉包函式:
閉指的是定義在乙個函式內部
包指的是該函式包含對外部作用域(非全域性作用域)名字的引用
def counter():n=0def incr():
nonlocal n
x=nn+=1
return x
return incr
c=counter()
print(c())
閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域裝飾器
1.什麼是裝飾器
就目前來看:裝飾器就是定義乙個函式,只不過該函式的功能是用來為其它函式新增額外的功能的
其實:裝飾器本身其實可以是任意可呼叫的物件,
被裝飾的物件也可以是任意可呼叫的物件。
2.為什麼要用裝飾器
軟體維護應該遵循開發封閉原則:
開放封閉原則指的是:
①軟體一旦上線執行後對修改源**是封閉的
②對擴充套件功能是開放的
這就用到了裝飾器
裝飾器的實現必須遵守兩大原則:
①不可修改被裝飾物件的源**
②不可修改被裝飾物件的呼叫方式
import timedef timmer(func):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return res
@timmer
def foo():
time.sleep(3)
print('from foo')
foo()
其實@代表語法糖
@timmer 表示foo = timmer(foo)
python基礎 閉包函式
內包函式定義 內部函式包含對外部作用域而非全劇作用域名字的引用,該內部函式稱為閉包函式 函式內部定義的函式稱為內部函式 一 建立乙個閉包 使用外層函式的變數也是閉包 使用外層函式的形參也是閉包 def outter 本質就是 記憶體空間 name zs def inner print name 引用...
python基礎 lambda 冒泡 閉包和裝飾
python使用lambda建立匿名函式 foo 18,9,22,17,24,8,12,27 print list filter lambda x x 3 0,foo print list map lambda x x 2 10,foo import functools,functools def ...
python之函式,閉包
引數 收集引數 引數名 def stu info print info 0 print info 1 print len info print type info stu shanxi 200008966 19 列印結果 shanxi 200008966 3 class tuple 返回值 def ...