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

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