1. 程式人生 > >Python(72)_生成器函式與裝飾器複習

Python(72)_生成器函式與裝飾器複習

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__)