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

Python(72)_生成器函數與裝飾器復習

生成器 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)_生成器函數與裝飾器復習