python正则表达式生成器_Python学习之路-装饰器生成器正则表达式
裝飾器
通俗的講,裝飾器就是在不改變源代碼基礎(chǔ)上,給源代碼增加新功能。
不改變函數(shù)的源代碼、調(diào)用方式、返回值等,給函數(shù)增加新功能。
經(jīng)典案例:登錄裝飾器,def?login_decorator(func):
def?inner():
if?USER_TEMP["status"]?==?False:
print("\033[31;1m用戶未登錄,請先登錄\033[0m")
login_atm()
func()
return?inner
@login_decorator
def?withdrawals():
print("取款函數(shù)。。。。")
說白了,給函數(shù)增加新功能,就是把這個函數(shù)當(dāng)作參數(shù)傳到另一個函數(shù)里面。
生成器
通過列表生成式,我們可以直接創(chuàng)建一個列表。但是,受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那后面絕大多數(shù)元素占用的空間都白白浪費(fèi)了。
所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環(huán)的過程中不斷推算出后續(xù)的元素呢?這樣就不必創(chuàng)建完整的list,從而節(jié)省大量的空間。在Python中,這種一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器:generator。
要創(chuàng)建一個generator,有很多種方法。第一種方法很簡單,只要把一個列表生成式的[]改成(),就創(chuàng)建了一個generator:>>>?L?=?[x?*?x?for?x?in?range(10)]
>>>?L
[0,?1,?4,?9,?16,?25,?36,?49,?64,?81]
>>>?g?=?(x?*?x?for?x?in?range(10))
>>>?g
?at?0x1022ef630>
創(chuàng)建L和g的區(qū)別僅在于最外層的[]和(),L是一個list,而g是一個generator。
如果要一個一個打印出來,可以通過next()函數(shù)獲得generator的下一個返回值:>>>?next(g)
0
>>>?next(g)
1
>>>?next(g)
4
>>>?next(g)
9
>>>?next(g)
16
>>>?next(g)
25
>>>?next(g)
36
>>>?next(g)
49
>>>?next(g)
64
>>>?next(g)
81
>>>?next(g)
Traceback?(most?recent?call?last):
File?"",?line?1,?in?
StopIteration
如果生成器中沒有更過元素時,調(diào)用next(g)會拋出StopIteration的錯誤
所以,我們創(chuàng)建了一個generator后,基本上永遠(yuǎn)不會調(diào)用next(),而是通過for循環(huán)來迭代它,并且不需要關(guān)心StopIteration的錯誤:>>>?g?=?(x?*?x?for?x?in?range(10))
>>>?for?n?in?g:
...?????print(n)
...
0
1
4
9
16
25
36
49
64
81
正則表達(dá)式
re模塊。常用正則表達(dá)式符號:
常用語法函數(shù):
總結(jié)
以上是生活随笔為你收集整理的python正则表达式生成器_Python学习之路-装饰器生成器正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学习笔记】第四章——文件 I(文件管理
- 下一篇: python字典会自动排序_python