Python擴展內容
- 2020 年 2 月 13 日
- 筆記
Python擴展內容
閱讀本文需要3分鐘


① python中yield關鍵字的使用:
yield
是一個類似return
的關鍵字,只是這個函數返回的是個生成器- 當你調用這個函數的時候,函數內部的程式碼並不立馬執行 ,這個函數只是返回一個生成器對象
- 當你使用for進行迭代的時候,函數中的程式碼才會執行
生成器
特點:可迭代;只能讀取一次;實時生成數據,不全存在記憶體中。
def fun(): yield "aaa" yield "bbb" yield "ccc" #返回可迭代對象(生成器) a = fun() print(a) # <generator object fun at 0x10f26e990> #可以將迭代對象轉成列表 # b = list(a) # print(b) #['aaa', 'bbb', 'ccc'] #遍歷(迭代)輸出,注意:只能讀取一次 for i in a: print(i) ''' aaa bbb ccc '''
- 案例:
import json #案例一、這是一段過程化程式碼編寫: str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]' data = json.loads(str) #解碼JSON數據 # 過濾出年齡大於20歲以上的資訊,並輸出 for item in data: if item['age']>20: #輸出數據 print('-' * 20) print(item['name'],":",item['age']) ''' #輸出結果: -------------------- zhangsan : 22 -------------------- wangwu : 24 ''' #案例二:程式碼拆分(將數據的處理封裝成函數): def fun1(): str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]' data = json.loads(str) #解碼JSON數據 #過濾出年齡大於20歲以上的資訊,並輸出 dlist = [] for item in data: if item['age']>20: #將過濾出來的數據放置到dlist中 print('-' * 20) dlist.append(item) return dlist # 使用(輸出數據) for i in fun1(): print(i['name'], ":", i['age']) ''' #輸出結果: -------------------- -------------------- wangwu : 24 wangwu : 24 ''' #案例三:程式碼拆分(使用yield返回生成器): def fun1(): str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]' data = json.loads(str) #解碼JSON數據 #過濾出年齡大於20歲以上的資訊,並輸出 for item in data: if item['age']>20: #將過濾出來的數據放置到dlist中 print('-' * 20) yield item # 使用(輸出數據) for i in fun1(): print(i['name'], ":", i['age']) ''' #輸出結果: -------------------- zhangsan : 22 -------------------- wangwu : 24 '''

② 裝飾器的使用:
- python裝飾器就是用於拓展原來函數功能的一種函數,這個函數的特殊之處在於它的返回值也是一個函數,
- 使用python裝飾器的好處就是在
不用更改原函數的程式碼前提下給函數增加新的功能
。 - 無參數的裝飾器實例
# 無參數的裝飾器實例 def deco(dd): def _deco(): print("start....") dd() print("end.....") return _deco @deco def demo(): print("demo()............") if __name__ == "__main__": d = demo d() #demo()
- 輸出結果
start.... demo()............ end....
# 帶參數的裝飾器實例 def deco(func): def _deco(a, b): print("before myfunc() called.") ret = func(a, b) print(" after myfunc() called. result: %s" % ret) return ret return _deco @deco def myfunc(a, b): print(" myfunc(%s,%s) called." % (a, b)) return a + b if __name__ == "__main__": myfunc(1, 2) myfunc(3, 4)
- 輸出結果
before myfunc() called. myfunc(1,2) called. after myfunc() called. result: 3 before myfunc() called. myfunc(3,4) called. after myfunc() called. result: 7
歲月有你,惜惜相處
發現更多精彩
關注公眾號