Python(72)_生成器函式與裝飾器複習
阿新 • • 發佈:2019-01-14
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__)