python-study-12
生活随笔
收集整理的這篇文章主要介紹了
python-study-12
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
復習
上節課復習函數嵌套
函數的嵌套定義
函數的嵌套調用
函數對象
可以將定義在函數內的函數返回到全局中使用,從而打破函數的層級限制
名稱空間與作用域
LEGB
作用域關系在函數定義階段時就已經固定死了,與調用位置無關
今日內容:
1、閉包函數
2、裝飾器
1閉包函數
作用域關系在函數定義階段時就已經固定死了,與調用位置無關即:在任意位置調用函數都需要跑到定義函數時尋找作用域關系
閉包函數:
閉指的是:該函數是一個內部函數
包指的是:指的是該函數包含對外部作用域(非全局作用域)名字的引用
為函數體傳值的方式一:使用參數的形式
為函數體傳值的方式二:包給函數 #相比參數傳值的方式可以一次賦值多次使用
2裝飾器
1、什么是裝飾器器指的是工具,而程序中的函數就具備某一功能的工具
裝飾指的是為被裝飾器對象添加額外功能
就目前的知識來看:
定義裝飾器就是定義一個函數,只不過該函數的功能是用來為
其他函數添加額外的功能
其實:
裝飾器本身其實可以是任意可調用的對象
被裝飾的對象也可以是任意可調用的對象
2、為什么要用裝飾器
軟件的維護應該遵循開放封閉原則
開放封閉原則指的是:
軟件一旦上線運行后對修改源代碼是封閉的,對擴展功能的是開放的
這就用到了裝飾器
裝飾器的實現必須遵循兩大原則:
1、不修改被裝飾對象的源代碼
2、不修改被裝飾對象的調用方式
裝飾器其實就在遵循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
?
轉載于:https://www.cnblogs.com/xujinjin18/p/9168604.html
總結
以上是生活随笔為你收集整理的python-study-12的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷.4383.[八省联考2018]林克
- 下一篇: websocket python爬虫_p