Python(72)_生成器函數與裝飾器復習
阿新 • • 發佈:2019-01-15
生成器 tool 函數 code 定義 alt 不可 nbsp fun
1 裝飾器復習,註意打印的順序
#-*-coding:utf-8-*- import os import time ‘‘‘ 語法糖 ‘‘‘ def wrapper(f): # 裝飾器函數 ,f是被裝飾的函數 def inner(*args,**kwargs): # 定義了內部函數,一定和return inner對應 ‘‘‘ 在被裝飾函數執行前要做的事情‘‘‘ print(‘在被裝飾函數執行前要做的事情‘) ret = f(*args,**kwargs) # 這句話是真正函數的執行 ‘‘‘ 在被裝飾函數執行後要做事情‘‘‘ print(‘在被裝飾函數執行後要做事情‘) return ret return inner @wrapper #裝飾器函數 相當於 func = wrapper(func) def func(day): # 被裝飾的函數 time.sleep(0.01) print(‘全體放假%s天‘%day) return ‘好開心‘ print(func(10))
2 聚合與散
def outer(*args,**kwargs): print(args) # 元組 (1, 3, 5, 6) print(*args) # 1 3 5 6 *在print函數裏能用,打散。和傳參的*作用的等價的 def inner(*args): # 聚合成1234 print(‘inner:‘,args) #(1, 3, 5, 6) inner(*args) outer(1,3,5,6) # = outer(*[1,2,3, 4]) #outer(*[1,2,3, 4])
3 普通函數
#-*-coding:utf-8-*- import os import time ‘‘‘ 生成器函數 ‘‘‘ def generator(): print(1)return ‘a‘ ret = generator() print(ret)
4、生成器的定義
#-*-coding:utf-8-*- import os import time ‘‘‘ 生成器函數 1、含有yield關鍵字的函數 2、yield不能和return共用,且需要寫在函數內部 ‘‘‘ def generator(): print(1) yield ‘a‘ # 生成器函數執行後會得到一個生成器作為返回值 <generator object generator at 0x7f794e030200> ret = generator() print(ret) # ret.__next__() 叠代器 ,叠代器一般不同,用for循環就可以了 print(ret.__next__()) # 觸發生成器裏面的代碼
5、for循環與叠代器和生成器的關系
#-*-coding:utf-8-*- import os import time ‘‘‘ 生成器函數 1、含有yield關鍵字的函數 2、yield不能和return共用,且需要寫在函數內部 3、yield和next配合,叠代器,生成器 ‘‘‘ def generator(): print(1) yield ‘a‘ print(2) yield ‘b‘ yield ‘c‘ # 生成器函數執行後會得到一個生成器作為返回值 <generator object generator at 0x7f794e030200> ret = generator() # 這是生成器,上面是生成器函數 print(ret) # ret.__next__() 叠代器 ,叠代器一般不同,用for循環就可以了 # print(ret.__next__()) # 觸發生成器裏面的代碼 # print(ret.__next__()) # print(ret.__next__()) for i in ret: print(i)
6、哇哈哈函數
def wahaha(): for i in range(2000): yield ‘哇哈哈%s‘%i g = wahaha() # 生成器 count = 0 for i in g: count +=1 print(i) if count >50: break; print(‘*******‘,g.__next__())
7、方法 __name__ 與 __doc__
def wahaha(): ‘‘‘ 一個打印哇哈哈的函數 :return: ‘‘‘ for i in range(2000): yield ‘哇哈哈%s‘%i g = wahaha() # 生成器 count = 0 for i in g: count +=1 # print(i) # if count >50: # break; print(‘*******‘,g.__next__()) print(wahaha.__name__) print(wahaha.__doc__)
8、方法 __name__ 與 __doc__ 升級
#-*-coding:utf-8-*- import os import time from functools import wraps ‘‘‘ ‘‘‘ def wrappper(func): @wraps(func) # 固定的,func傳進去 def inner(*args,**kwargs): print("前") ret = func(*args,**kwargs) print("後") return ret return inner @wrappper # 不可少! def holiday(day): ‘‘‘ 這是一個放假通知 :param day: :return: ‘‘‘ print(‘全體放假%s天‘%day) return ‘好開心‘ holiday(10) print(holiday.__name__) print(holiday.__doc__)
Python(72)_生成器函數與裝飾器復習