裝飾器進階(來自女神——Eva_J)
functools.wraps
帶參數的裝飾器
多個裝飾器裝飾同一個函數
上周作業講解
1.檔案操作
2.字元串操作
3.流程控制
複習:
裝飾器開發原則:開放封閉原則
裝飾器的作用:在不改變原函數的第哦啊用方式的情況下,在函數的前後添加功能
裝飾器的本質:閉包函數
# 例:
def wrapper(func):
def inner(*args,**kwargs):
print('Hello!')
ret = func(*args,**kwargs)
print('在被裝飾的函數執行後做的事')
return ret
return inner
@wrapper
def holiday(day):
print('全體放假%s天'%day)
return 'Happy'
ret = holiday(3)
print(ret)
Hello!
全體放假3天
在被裝飾的函數執行後做的事
Happy
生成器函數
#普通函數
def generator():
print("hello Boy")
return "a" #return是一個關鍵字 yield也是一個關鍵字
rete = generator()
print(ret)
# 隻要含有yield關鍵字的函數都是生成器,yield必須寫在函數裡,并且不能與return并用
# 隻要是生成器函數,執行之後會得到一個生成器作為傳回值 看到yield就會立馬生成一個生成器,
#而生成器就是一個疊代器
# 用yield的生成器
def generator1():
print("Yahoo")
yield 'a'
rea = generator1()
print(rea)
print(rea.__next__())
hello Boy
Happy
<generator object generator1 at 0x000001F108F02D68>
Yahoo
a
def generator2():
print(1)
yield 'a'
print(2)
yield 'bb'
g = generator2() # 如果隻寫這一步是不會執行的,必須寫以下這一步
roc = g.__next__()
print(roc)
1
a
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-6bWyJJnS-1584025743521)(attachment:image.png)]
# 寫一個生成器,我們直接就可以拿到了一個生成器,而清單是一個可疊代(在for循環中,
#每次都得到一個新的疊代器)的對象。 疊代器不占記憶體。
def wahaha():
for i in range(15):
yield '中國必勝,武漢必勝!%s'%i
fox = wahaha()
count = 0
for i in fox: # 此處生成了一個疊代器
count += 1
print(i)
if count > 10:
break
print('**********',fox.__next__()) #可以接着往下走,生成器隻記錄下一個值的狀态,
#隻要我們去找,他就能給我們生成
中國必勝,武漢必勝!0
中國必勝,武漢必勝!1
中國必勝,武漢必勝!2
中國必勝,武漢必勝!3
中國必勝,武漢必勝!4
中國必勝,武漢必勝!5
中國必勝,武漢必勝!6
中國必勝,武漢必勝!7
中國必勝,武漢必勝!8
中國必勝,武漢必勝!9
中國必勝,武漢必勝!10
********** 中國必勝,武漢必勝!11
def tailer(filename):
fo = open(filename,encoding = 'utf-8')
while True:
line = fo.readline()
if line.strip():
yield line.strip()
tailer('file')
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-6bU0z31P-1584025743527)(attachment:image.png)]
上面代碼的輸出效果是如此圖所示的。
# 新例:
def tailer(filename):
fo = open(filename,encoding = 'utf-8')
while True:
line = fo.readline()
if line.strip():
yield line.strip()
g = tailer('file.txt')
for i in g:
if 'python' in i:
print('****',i)
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-GE3BzhRz-1584025743528)(attachment:image.png)]
不知道是什麼原因在jupyter notebook裡面無法顯示此圖,是以按照老師的作法,我在pycharm上運作了之後截圖到這裡,上面一段代碼的輸出就結果就是這樣了,用女神的話說就是,我隻關心我關心的,是以說,當源文檔裡面出現了python時,程式自動就輸出了****python