
文章目錄
- 前言
- 生成器
- 為什么使用
- 格式
- 嵌套函式
- 裝飾器
- 使用場景
- 使用
- 結語
前言
相信大家已經對函式有了一定的理解了吧,那么來看看生成器和裝飾器吧
生成器
按道理來說,生成器應該是和迭代器一起講的,但是由于這樣那樣的原因,就放在這里吧
生成器就是回傳迭代器的函式,之前也說過什么是迭代器,就不多做贅述,
那么本質上來說,生成器其實就是一個函式
不過呢,生成器不是使用return,而是yield作為回傳關鍵字,
在迭代器中,當你使用一次后,計算機會記住你已經用過一次了,下次使用的時候,會從你用過的值開始繼續使用
而在生成器中,當呼叫函式時,遇到yield時,計算機會停止繼續呼叫函式,記住當前使用的值,以便于下次呼叫時,使用下次的值
為什么使用
生成器一般用于占用記憶體較大,資料較多的情況
比如這個
for i in range(1000**100000):
print(i)
資料比較大,當我們的機器遍歷這個的時候,就會消耗較大的記憶體來去遍歷,而如果有一種方法,可以讓這個回圈在我用的時候再遍歷的話,就能節省許多記憶體
格式
def Xxx():
代碼
yield x
把上面的例子做成一個簡單的生成器
def Scq():
for i in range(1000**100000):
yield i
sc = Scq()
print(next(sc))
print(next(sc))
print(next(sc))
print(next(sc))
運行結果:

可以看到,當我們使用的時候,就會給我們相應的值,而如果我們直接遍歷那個值的話,就會等待很久才會完成,
嵌套函式
見過這么多嵌套,看到嵌套函式應該沒什么了吧
直接上代碼
def Out():
def Int():
print("我是里面的")
print("我是外面的")
return Int()
Out()
運行結果:

這個平常并不會用到,但是這個只是給裝飾器做鋪墊的,讓你們不至于看到裝飾器的時候一臉懵逼
回傳值是呼叫內部函式,不這樣的話,內部函式就不會被使用
裝飾器
我只能說,裝飾器非常的666
裝飾器是什么,就是給函式進行裝飾的東西,
使用場景
我們公司這段代碼已經上市,無法進行修改,但是客戶又提了需求,需要我們添加功能,這時候怎么辦?
這貌似無解,因為不能修改,你還讓我添加功能,這怎么做到?
這還真能做到!這個方法就是裝飾器,他可以在不動用代碼的同時,對代碼進行功能上的添加,
使用
# 為了好理解,就用中文表示了
def 外部函式(a):
# 定義一個有參函式,引數是用來代指核心代碼的
def 內部函式():
# 定義內部函式,使用形參呼叫核心代碼
a()
# 在形參的上面就是添加在上面的,在下面就是添加在下面的
print("在核心代碼函式里面添加的")
return 內部函式 # 回傳內部函式的參考,而不是內部函式
@外部函式()
def 核心代碼():
print("我是核心代碼")
核心代碼()
關于內部函式的參考,在這里說一下
不加括號就是參考是一組記憶體地址,指向內部函式,而加括號,就是內部函式的呼叫,會使用內部函式,就像嵌套函式那樣,
結語
先說這么多吧,不早了,
興趣是最好的老師,堅持是不變的真理,
學習不要急躁,一步一個腳印,踏踏實實的往前走,
每天進步一點點,榷訓月累之下,你就會發現自己已經變得很厲害了,
我是布小禪,一枚自學萌新,跟著我每天進步一點點吧!
說了這么多暫時也就夠了,那么就告辭吧

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286193.html
標籤:AI
