怎么理解裝飾器,用過(guò)或者寫過(guò)什么裝飾器嗎?
1.1.概述:
裝飾器本質(zhì)上是一個(gè) Python 函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下增加額外功能,裝飾器的返回值也是一個(gè)函數(shù)對(duì)象。
1.2.詳細(xì)描述:
1.import?logging??8.????????ret?=?oldfunc(*args,?**kwargs)??
9.????????return?ret??
10.??
11.?????返回新函數(shù)??
12.????return?new_func??
13.??
14.??
15.#?通過(guò)語(yǔ)法糖使用裝飾器??
16.@decorator??
br/>2.#?定義裝飾器,接收舊函數(shù)??
3.def?decorator(oldfunc):??
4.?????定義新函數(shù),加強(qiáng)原函數(shù)??
5.????def?new_func(*args,?**kwargs):??
6.????????加強(qiáng)代碼寫這里,記錄日志信息....??
7.????????logging.error("記錄日志信息")??
8.????????ret?=?oldfunc(*args,?**kwargs)??
9.????????return?ret??
10.??
11.?????返回新函數(shù)??
12.????return?new_func??
13.??
14.??
15.#?通過(guò)語(yǔ)法糖使用裝飾器??
16.@decorator??
17.def?square(x):??
18.?????獲取?兩個(gè)數(shù)的平方??
19.????return?x**2??
20.??
21.#?執(zhí)行??
22.print(square(5))??
1.3.應(yīng)用場(chǎng)景:
日志記錄,統(tǒng)計(jì)代碼執(zhí)行時(shí)間,權(quán)限驗(yàn)證
2.迭代器和生成器的區(qū)別
2.1.概述:
生成器是特殊的迭代器,它更加優(yōu)雅.生成器中的元素不是直接生成好,而是每使用next()方法獲取下一個(gè)元素的時(shí)候才創(chuàng)建,從而大大節(jié)省內(nèi)存空間。迭代器和生成器的區(qū)別
2.2.詳細(xì)描述:
1.迭代器是一個(gè)更加抽象的概念,任何對(duì)象,如果它的類有next方法和iter方法返回自身。對(duì)于string、list、dict、tuple等這類容器對(duì)象,使用for循環(huán)遍歷是很方便的。在后臺(tái)for語(yǔ)句對(duì)容器對(duì)象調(diào)用iter()函數(shù),iter()是Python的內(nèi)置函數(shù)。iter()會(huì)返回一個(gè)定義了next()方法的迭代器對(duì)象,它在容器中逐個(gè)訪問(wèn)容器內(nèi)元素,next()也是python的內(nèi)置函數(shù)。在沒有后續(xù)元素時(shí),next()會(huì)拋出一個(gè)StopIterration的異常。
2.生成器(Generator)是創(chuàng)建迭代器的簡(jiǎn)單而強(qiáng)大的工具。它有列表生成器和函數(shù)生成器.函數(shù)生成器寫起來(lái)就像是正規(guī)的函數(shù),只是在返回?cái)?shù)據(jù)的時(shí)候需要使用yield語(yǔ)句返回。每次next()被調(diào)用時(shí),生成器會(huì)返回它脫離的位置(它記憶語(yǔ)句最后一次執(zhí)行的位置和所有的數(shù)據(jù)值)
2.3.應(yīng)用場(chǎng)景:
1.#?列表生成器,其實(shí)就是列表推導(dǎo)式的[]寫成()??
2.g?=?(i?for?i?in?range(10))??
3.print(next(g))??
4.print(next(g))??
5.print(next(g))??
6.print(next(g))??
7.??
8.??
9.#?通過(guò)?函數(shù)式生成器?獲取?1-10?數(shù)字的平方??
10.def?sqrt():??
11.????num?=?1??
12.????while?num?<=?10:??
13.????????返回平方??
14.????????yield?num**2??
15.????????num?+=?1??
16.??
17.????????調(diào)用函數(shù)返回生成器??
18.????????g?=?sqrt()??
19.????????print(next(g))??
20.????????print(next(g))??
21.????????print(next(g))??
22.????????print(next(g))??
(本文由源碼時(shí)代技術(shù)老師原創(chuàng)撰寫,轉(zhuǎn)載請(qǐng)注明出處)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
