日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day12 装饰器进阶

發(fā)布時間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day12 装饰器进阶 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

day12 裝飾器進(jìn)階
#裝飾器進(jìn)階
#functools.wraps
#帶參數(shù)的裝飾器
#多個裝飾器裝飾用一個函數(shù)

def outer(*args,**kwargs):#接收的時候是聚合(成元祖的形式) print(args) print(*args) def inner(*args): print('inner:',args) inner(*args) #調(diào)用的時候是打散outer(1,2,3,4) #outer(*[1,2,3,4]) outer(*[1,2,3,4])

?

#可迭代對象包括:字符串、列表、元祖、字典、集合

from collections.abc import Iterablel = [1, 2, 3, 4] t = (1, 2, 3, 4) d = {1: 2, 3: 4} s = {1, 2, 3, 4}print(isinstance(l, Iterable)) print(isinstance(t, Iterable)) print(isinstance(d, Iterable)) print(isinstance(s, Iterable))

?

#迭代:可以將某個數(shù)據(jù)集內(nèi)的數(shù)據(jù)“一個挨著一個的取出來”
#3.可迭代協(xié)議:就是內(nèi)部實現(xiàn)了__iter__方法

print(dir([1,2])) print(dir((2,3))) print(dir({1:2})) print(dir({1,2}))l = [1,2,3,4] l_iter = l.__iter__() item = l_iter.__next__() print(item) item = l_iter.__next__() print(item) item = l_iter.__next__() print(item) item = l_iter.__next__() print(item) item = l_iter.__next__() print(item)

?

#這是一段會報錯的代碼,如果我們一直取next取到迭代器里已經(jīng)沒有元素了,
# 就會拋出一個異常StopIteration,告訴我們,列表中已經(jīng)沒有有效的元素了。

l = [1,2,3,4] l_iter = l.__iter__() while True:try:item = l_iter.__next__()print(item)except StopIteration:break

?

#迭代器遵循迭代器協(xié)議:必須擁有__iter__方法和__next__方法。
#還賬:next和iter方法
'''Python中提供的生成器:
1.生成器函數(shù):常規(guī)函數(shù)定義,但是,使用yield語句而不是return語句返回結(jié)果。yield語句一次返回一個結(jié)果,在每個結(jié)果中間,掛起函數(shù)的狀態(tài),以便下次重它離開的地方繼續(xù)執(zhí)行
2.生成器表達(dá)式:類似于列表推導(dǎo),但是,生成器返回按需產(chǎn)生結(jié)果的一個對象,而不是一次構(gòu)建一個結(jié)果列表'''

import time def genrator_fun1():a = 1print('現(xiàn)在定義了a變量')yield ab = 2print('現(xiàn)在又定義了b變量')yield b g1 = genrator_fun1() print('g1 : ',g1) #打印g1可以發(fā)現(xiàn)g1就是一個生成器 print('-'*20) #我是華麗的分割線 print(next(g1)) time.sleep(1) #sleep一秒看清執(zhí)行過程 print(next(g1))

?

?

?

#普通函數(shù)
def generator():
print(1)
return 'a'
ret = generator()
print(ret)
#生成器函數(shù)
#只要含有yield關(guān)鍵字的函數(shù)都是生成器函數(shù)
#yield不可以跟return共用,函數(shù)里有了yield就不能用return,且需要寫在函數(shù)內(nèi)部


def generator():
print(1)
yield 'a'
#生成器函數(shù):執(zhí)行之后會得到一個生成器作為返回值(函數(shù)內(nèi)部代碼不會執(zhí)行)
ret = generator()
print(ret)
print(ret.__next__())
# ret.__iter__()

def generator():
print(1)
yield 'a'
print(2)
yield 'b'
yield 'c'
g=generator()
for i in g:
print(i)
print(g.__next__())
print(g.__next__())
print(g.__next__())

#哇哈哈
def wahaha():
for i in range(2000000):
yield '娃哈哈%s'%i
g = wahaha()
count = 0
for i in g:
count+=1
print(i)
if count > 50:
break
print('***********',g.__next__())
for i in g:
count+=1
print(i)
if count > 100:
break

#監(jiān)聽文件輸入
def tail(file):
f = open('file', encoding='utf-8')
while 1:
line = f.readline()
if line.strip():
yield line.strip()
g= tail('file')
for i in g:
if 'python' in i:
print(i)

#帶參數(shù)的裝飾器(三層裝飾器:最多三層)
import time
FLAG = True
def timmer_out(flag):
def timmer(func):
def inner(*args,**kwargs):
if flag:
start=time.time()
ret = func(*args,**kwargs)
end = time.time()
print(end-start)
return ret
else:
ret = func(*args, **kwargs)
return ret
return inner
return timmer
#timmer = timmer_out(FLAG)等同于timmer_out=timmer_out(func)
@timmer_out(FLAG)
# @timmer
def wahaha():
time.sleep(0.1)
print('aaaaaaaaaaaaaaaaa')

@timmer_out(FLAG)
# @timmer
def erguotou():
time.sleep(0.1)
print('bbbbbbbbbbbbbbbbbb')

wahaha()
FLAG=False
erguotou()

#多個裝飾器裝飾一個函數(shù)
def wrapper1(func): #func===>f
def inner1():
print('wrapper1 ,before func')
ret = func() #f
print('wrapper1 ,after func')
return ret
return inner1

def wrapper2(func): #func--->inner1
def inner2():
print('wrapper2 ,before func')
ret = func() #inner1
print('wrapper2 ,after func')
return ret
return inner2

def wrapper3(func): #func--->inner1
def inner3():
print('wrapper3 ,before func')
ret = func() #inner1
print('wrapper3 ,after func')
return ret
return inner3
@wrapper3
@wrapper2 #f=wapper2(f)--->wrapper(inner1)
@wrapper1 #f=wapper1(f)=inner1
def f():
print('in f')
return 'hahaha'

print(f())#===>inner()

轉(zhuǎn)載于:https://www.cnblogs.com/Murraya/p/10673542.html

總結(jié)

以上是生活随笔為你收集整理的day12 装饰器进阶的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。