python-study-12
生活随笔
收集整理的這篇文章主要介紹了
python-study-12
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
復(fù)習(xí)
上節(jié)課復(fù)習(xí)函數(shù)嵌套
函數(shù)的嵌套定義
函數(shù)的嵌套調(diào)用
函數(shù)對象
可以將定義在函數(shù)內(nèi)的函數(shù)返回到全局中使用,從而打破函數(shù)的層級限制
名稱空間與作用域
LEGB
作用域關(guān)系在函數(shù)定義階段時就已經(jīng)固定死了,與調(diào)用位置無關(guān)
今日內(nèi)容:
1、閉包函數(shù)
2、裝飾器
1閉包函數(shù)
作用域關(guān)系在函數(shù)定義階段時就已經(jīng)固定死了,與調(diào)用位置無關(guān)即:在任意位置調(diào)用函數(shù)都需要跑到定義函數(shù)時尋找作用域關(guān)系
閉包函數(shù):
閉指的是:該函數(shù)是一個內(nèi)部函數(shù)
包指的是:指的是該函數(shù)包含對外部作用域(非全局作用域)名字的引用
為函數(shù)體傳值的方式一:使用參數(shù)的形式
為函數(shù)體傳值的方式二:包給函數(shù) #相比參數(shù)傳值的方式可以一次賦值多次使用
2裝飾器
1、什么是裝飾器器指的是工具,而程序中的函數(shù)就具備某一功能的工具
裝飾指的是為被裝飾器對象添加額外功能
就目前的知識來看:
定義裝飾器就是定義一個函數(shù),只不過該函數(shù)的功能是用來為
其他函數(shù)添加額外的功能
其實:
裝飾器本身其實可以是任意可調(diào)用的對象
被裝飾的對象也可以是任意可調(diào)用的對象
2、為什么要用裝飾器
軟件的維護(hù)應(yīng)該遵循開放封閉原則
開放封閉原則指的是:
軟件一旦上線運行后對修改源代碼是封閉的,對擴(kuò)展功能的是開放的
這就用到了裝飾器
裝飾器的實現(xiàn)必須遵循兩大原則:
1、不修改被裝飾對象的源代碼
2、不修改被裝飾對象的調(diào)用方式
裝飾器其實就在遵循1和2原則的前提下為被裝飾對象添加新功能
3、如何用裝飾器 裝飾器語法糖 在被裝飾對象正上方,并且是單獨一行寫上@裝飾器名裝飾器實例: import time def timmer(func):#func=最原始的indexdef wrapper(*args,**kwargs):start=time.time()res=func(*args,**kwargs)stop=time.time()print('run time is %s' %(stop - start))return resreturn wrapper@timmer # index=timmer(index) def index():print('welcome to index')time.sleep(3)return 123@timmer # home=timmer(home) def home(name):print('welcome %s to home page' %name)time.sleep(2)res=index() home('egon')裝飾器模板 def deco(func):def wrapper(*args,**kwargs):res=func(*args,**kwargs)return resreturn wrapper @deco View Code
?
轉(zhuǎn)載于:https://www.cnblogs.com/xujinjin18/p/9168604.html
總結(jié)
以上是生活随笔為你收集整理的python-study-12的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷.4383.[八省联考2018]林克
- 下一篇: mysql查询缓慢原因和解决方案