欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中with及contextlib的用法詳解

 更新時間:2017年06月08日 09:39:15   作者:糖拌咸魚  
這篇文章主要介紹了Python中with及contextlib的用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了with及contextlib的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python中with及contextlib的用法。分享給大家供大家參考,具體如下:

平常Coding過程中,經(jīng)常使用到的with場景是(打開文件進(jìn)行文件處理,然后隱式地執(zhí)行了文件句柄的關(guān)閉,同樣適合socket之類的,這些類都提供了對with的支持):

with file('test.py','r') as f :
  print f.readline()

with的作用,類似try...finally...,提供一種上下文機(jī)制,要應(yīng)用with語句的類,其內(nèi)部必須提供兩個內(nèi)置函數(shù)__enter__以及__exit__。前者在主體代碼執(zhí)行前執(zhí)行,后則在主體代碼執(zhí)行后執(zhí)行。as后面的變量,是在__enter__函數(shù)中返回的。通過下面這個代碼片段以及注釋說明,可以清晰明白__enter__與__exit__的用法:

#!encoding:utf-8
class echo :
  def output(self) :
    print 'hello world'
  def __enter__(self):
    print 'enter'
    return self #返回自身實(shí)例,當(dāng)然也可以返回任何希望返回的東西
  def __exit__(self, exception_type, exception_value, exception_traceback):
    #若發(fā)生異常,會在這里捕捉到,可以進(jìn)行異常處理
    print 'exit'
    #如果改__exit__可以處理改異常則通過返回True告知該異常不必傳播,否則返回False
    if exception_type == ValueError :
      return True
    else:
      return False
with echo() as e:
  e.output()
  print 'do something inside'
print '-----------'
with echo() as e:
  raise ValueError('value error')
print '-----------'
with echo() as e:
  raise Exception('can not detect')

運(yùn)行結(jié)果:

contextlib是為了加強(qiáng)with語句,提供上下文機(jī)制的模塊,它是通過Generator實(shí)現(xiàn)的。通過定義類以及寫__enter__和__exit__來進(jìn)行上下文管理雖然不難,但是很繁瑣。contextlib中的contextmanager作為裝飾器來提供一種針對函數(shù)級別的上下文管理機(jī)制。常用框架如下:

from contextlib import contextmanager
@contextmanager
def make_context() :
  print 'enter'
  try :
    yield {}
  except RuntimeError, err :
    print 'error' , err
  finally :
    print 'exit'
with make_context() as value :
  print value

contextlib還有連個重要的東西,一個是nested,一個是closing,前者用于創(chuàng)建嵌套的上下文,后則用于幫你執(zhí)行定義好的close函數(shù)。但是nested已經(jīng)過時了,因?yàn)閣ith已經(jīng)可以通過多個上下文的直接嵌套了。下面是一個例子:

from contextlib import contextmanager
from contextlib import nested
from contextlib import closing
@contextmanager
def make_context(name) :
  print 'enter', name
  yield name
  print 'exit', name
with nested(make_context('A'), make_context('B')) as (a, b) :
  print a
  print b
with make_context('A') as a, make_context('B') as b :
  print a
  print b
class Door(object) :
  def open(self) :
    print 'Door is opened'
  def close(self) :
    print 'Door is closed'
with closing(Door()) as door :
  door.open()

運(yùn)行結(jié)果:

總結(jié):python有很多強(qiáng)大的特性,由于我們平常總習(xí)慣于之前C++或java的一些編程習(xí)慣,時常忽略這些好的機(jī)制。因此,要學(xué)會使用這些python特性,讓我們寫的python程序更像是python。

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • pycocotools介紹以及在windows10下的安裝過程

    pycocotools介紹以及在windows10下的安裝過程

    這篇文章主要介紹了pycocotools介紹以及在windows10下的安裝過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python實(shí)現(xiàn)歸并排序算法

    python實(shí)現(xiàn)歸并排序算法

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)歸并排序算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python中Wxpython實(shí)現(xiàn)剪切、復(fù)制、粘貼和文件打開示例

    Python中Wxpython實(shí)現(xiàn)剪切、復(fù)制、粘貼和文件打開示例

    我們在Python開發(fā)中中,可以使用WxPython庫來創(chuàng)建GUI應(yīng)用程序,并實(shí)現(xiàn)剪切、復(fù)制、粘貼和文件打開功能,本文就來介紹一下,感興趣的可以了解一下
    2024-03-03
  • OpenCV?光流Optical?Flow示例

    OpenCV?光流Optical?Flow示例

    這篇文章主要為大家介紹了OpenCV?光流Optical?Flow示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python Pygame實(shí)戰(zhàn)之賽車游戲的實(shí)現(xiàn)

    Python Pygame實(shí)戰(zhàn)之賽車游戲的實(shí)現(xiàn)

    如今的游戲可謂是層出不窮,不過小編發(fā)現(xiàn),賽車游戲也是深受大家歡迎啊,像跑跑卡丁車、QQ飛車,還有主機(jī)游戲極品飛車系列。本文將用Python中的Pygame模塊制作一個簡單的賽車游戲,感興趣的可以了解一下
    2022-03-03
  • 使用VLC實(shí)現(xiàn)自動播放視頻的操作方法

    使用VLC實(shí)現(xiàn)自動播放視頻的操作方法

    VLC是一款開源的多媒體播放器,它支持大量的視頻和音頻格式,并且具有強(qiáng)大的腳本和編程接口,這篇文章主要介紹了使用VLC實(shí)現(xiàn)自動播放視頻,需要的朋友可以參考下
    2024-03-03
  • numpy數(shù)組的維度、軸及運(yùn)用詳解

    numpy數(shù)組的維度、軸及運(yùn)用詳解

    這篇文章主要介紹了numpy數(shù)組的維度、軸詳解,numpy數(shù)組的某個軸,指的是:該數(shù)組的某個維度的方向,其方向從索引號由底到高,許多numpy方法或函數(shù)在調(diào)用時,常常需要指定一個關(guān)鍵參數(shù)“axis=X”,它表示的是沿哪個軸的方向進(jìn)行運(yùn)算,需要的朋友可以參考下
    2023-09-09
  • python并發(fā)和異步編程實(shí)例

    python并發(fā)和異步編程實(shí)例

    這篇文章主要為大家詳細(xì)介紹了python并發(fā)和異步編程實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python基礎(chǔ)之多態(tài)

    python基礎(chǔ)之多態(tài)

    這篇文章主要介紹了python多態(tài),實(shí)例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10
  • selenium+python自動化測試之鼠標(biāo)和鍵盤事件

    selenium+python自動化測試之鼠標(biāo)和鍵盤事件

    這篇文章主要介紹了selenium+python自動化測試之鼠標(biāo)和鍵盤事件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論