日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python学习笔记:常用内建模块5

發(fā)布時(shí)間:2025/3/15 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习笔记:常用内建模块5 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

最近在學(xué)習(xí)深度學(xué)習(xí),已經(jīng)跑出了幾個(gè)模型,但Pyhton的基礎(chǔ)不夠扎實(shí),因此,開始補(bǔ)習(xí)Python了,大家都推薦廖雪峰的課程,因此,開始了學(xué)習(xí),但光學(xué)有沒有用,還要和大家討論一下,因此,寫下這些帖子,廖雪峰的課程連接在這里:廖雪峰
Python的相關(guān)介紹,以及它的歷史故事和運(yùn)行機(jī)制,可以參見這篇:python介紹
Python的安裝可以參見這篇:Python安裝
Python的運(yùn)行模式以及輸入輸出可以參見這篇:Python IO
Python的基礎(chǔ)概念介紹,可以參見這篇:Python 基礎(chǔ)
Python字符串和編碼的介紹,可以參見這篇:Python字符串與編碼
Python基本數(shù)據(jù)結(jié)構(gòu):list和tuple介紹,可以參見這篇:Python list和tuple
Python控制語句介紹:ifelse,可以參見這篇:Python 條件判斷
Python控制語句介紹:循環(huán)實(shí)現(xiàn),可以參見這篇:Python循環(huán)語句
Python數(shù)據(jù)結(jié)構(gòu):dict和set介紹Python數(shù)據(jù)結(jié)構(gòu)dict和set
Python函數(shù)相關(guān):Python函數(shù)
Python高階特性:Python高級(jí)特性
Python高階函數(shù):Python高階函數(shù)
Python匿名函數(shù):Python匿名函數(shù)
Python裝飾器:Python裝飾器
Python偏函數(shù):Python偏函數(shù)
Python模塊:Python模塊
Python面向?qū)ο缶幊?#xff08;1):Python面向?qū)ο?
Python面向?qū)ο缶幊?#xff08;2):Python面向?qū)ο?#xff08;2)
Python面向?qū)ο缶幊?#xff08;3):Python面向?qū)ο?#xff08;3)
Python面向?qū)ο缶幊?#xff08;4):Pyhton面向?qū)ο?#xff08;4)
Python面向?qū)ο蟾呒?jí)編程(上):Python面向?qū)ο蟾呒?jí)編程(上)
Python面向?qū)ο蟾呒?jí)編程(中上):Python面向?qū)ο蟾呒?jí)編程(中上)
Python面向?qū)ο蟾呒?jí)編程(中下):Python面向?qū)ο蟾呒?jí)編程(中下)
Python面向?qū)ο蟾呒?jí)編程(完):Python面向?qū)ο蟾呒?jí)編程(完)
Python錯(cuò)誤調(diào)試(起):Python調(diào)試:起
Python錯(cuò)誤調(diào)試(承):Python調(diào)試:承
Python錯(cuò)誤調(diào)試(轉(zhuǎn)):Python調(diào)試:轉(zhuǎn)
Python錯(cuò)誤調(diào)試(合):python調(diào)試:合
Python文件IO編程:Python文件IO
Python文件IO編程2:Python文件IO2
Python文件IO編程3:PYthon文件IO3
Python進(jìn)程和線程(起):Python進(jìn)程和線程起
Python進(jìn)程和線程(承):Python進(jìn)程和線程承
Python進(jìn)程和線程(轉(zhuǎn)):Python進(jìn)程和線程轉(zhuǎn)
Python進(jìn)程和線程(合):Python進(jìn)程和線程合
Python正則表達(dá)式:Python正則表達(dá)式
Python學(xué)習(xí)筆記:常用內(nèi)建模塊1:Python學(xué)習(xí)筆記:常用內(nèi)建模塊1
Python學(xué)習(xí)筆記:常用內(nèi)建模塊2:Python學(xué)習(xí)筆記:常用內(nèi)建模塊2
Python學(xué)習(xí)筆記:常用內(nèi)建模塊3:Python學(xué)習(xí)筆記:常用內(nèi)建模塊3
Python學(xué)習(xí)筆記:常用內(nèi)建模塊4:Python學(xué)習(xí)筆記: 常用內(nèi)建模塊4

目錄

  • 前言
  • 目錄
  • Contextlib
    • @contextmanager
    • @closing

Contextlib

在Python中,讀寫文件這樣的資源要特別注意,必須在使用完畢后正確關(guān)閉它們。正確關(guān)閉文件資源的一個(gè)方法是使用

try...finallytry:f = open('/path/to/file', 'r')f.read() finally:if f:f.close()

寫try…finally非常繁瑣。Python的with語句允許我們非常方便地使用資源,而不必?fù)?dān)心資源沒有關(guān)閉,所以上面的代碼可以簡化為:

with open('/path/to/file', 'r') as f:f.read()

并不是只有open()函數(shù)返回的fp對(duì)象才能使用with語句。實(shí)際上,任何對(duì)象,只要正確實(shí)現(xiàn)了上下文管理,就可以用于with語句。

實(shí)現(xiàn)上下文管理是通過_enter_和_exit_這兩個(gè)方法實(shí)現(xiàn)的。例如,下面的class實(shí)現(xiàn)了這兩個(gè)方法:

class Query(object):def __init__(self, name):self.name = namedef __enter__(self):print('Begin')return selfdef __exit__(self, exc_type, exc_value, traceback):if exc_type:print('Error')else:print('End')def query(self):print('Query info about %s...' % self.name)

這樣我們就可以把自己寫的資源對(duì)象用于with語句:

with Query('Bob') as q:q.query()

@contextmanager

編寫enterexit仍然很繁瑣,因此Python的標(biāo)準(zhǔn)庫contextlib提供了更簡單的寫法,上面的代碼可以改寫如下:

from contextlib import contextmanagerclass Query(object):def __init__(self, name):self.name = namedef query(self):print('Query info about %s...' % self.name)@contextmanager def create_query(name):print('Begin')q = Query(name)yield qprint('End')

@contextmanager這個(gè)decorator接受一個(gè)generator,用yield語句把with … as var把變量輸出出去,然后,with語句就可以正常地工作了:

with create_query('Bob') as q:q.query()

很多時(shí)候,我們希望在某段代碼執(zhí)行前后自動(dòng)執(zhí)行特定代碼,也可以用@contextmanager實(shí)現(xiàn)。例如:

@contextmanager def tag(name):print("<%s>" % name)yieldprint("</%s>" % name)with tag("h1"):print("hello")print("world")

上述代碼執(zhí)行結(jié)果為:

<h1> hello world </h1>

代碼的執(zhí)行順序是:

1 with語句首先執(zhí)行yield之前的語句,因此打印出<h1>;2 yield調(diào)用會(huì)執(zhí)行with語句內(nèi)部的所有語句,因此打印出hello和world;3 最后執(zhí)行yield之后的語句,打印出</h1>。

因此,@contextmanager讓我們通過編寫generator來簡化上下文管理。

@closing

如果一個(gè)對(duì)象沒有實(shí)現(xiàn)上下文,我們就不能把它用于with語句。這個(gè)時(shí)候,可以用closing()來把該對(duì)象變?yōu)樯舷挛膶?duì)象。例如,用with語句使用urlopen():

from contextlib import closing from urllib.request import urlopenwith closing(urlopen('https://www.python.org')) as page:for line in page:print(line)

closing也是一個(gè)經(jīng)過@contextmanager裝飾的generator,這個(gè)generator編寫起來其實(shí)非常簡單:

@contextmanager def closing(thing):try:yield thingfinally:thing.close()

它的作用就是把任意對(duì)象變?yōu)樯舷挛膶?duì)象,并支持with語句。

@contextlib還有一些其他decorator,便于我們編寫更簡潔的代碼。

總結(jié)

以上是生活随笔為你收集整理的Python学习笔记:常用内建模块5的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。