欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python with statement 進行文件操作指南

系統 1611 0

由于之前有一個項目老是要打開文件,然后用pickle.load(file),再處理。。。最后要關閉文件,所以覺得有點繁瑣,代碼也不簡潔。所以向python with statement尋求解決方法。

在網上看到一篇文章:http://effbot.org/zone/python-with-statement.htm是介紹with 的,參考著例子進行了理解。

如果經常有這么一些代碼段的話,可以用一下幾種方法改進:

代碼段:

            
set thing up
try:
  do something
except :
  handle exception
finally:
  tear thing down

          

案例1:

假如現在要實現這么一個功能,就是打開文件,從文件里面讀取數據,然后打印到終端,之后關閉文件。

那么從邏輯上來說,可以抽取“打印到終端”為數據處理部分,應該可以獨立開來作為一個函數。其他像打開、關閉文件應該是一起的。

文件名為:for_test.txt

方法1:

用函數,把公共的部分抽取出來。
?

            
#!/usr/bin/env python 
from __future__ import with_statement  
filename = 'for_test.txt' 
def output(content): 
  print content 
#functio solution 
def controlled_execution(func): 
  #prepare thing 
  f = None 
  try: 
    #set thing up 
    f = open(filename, 'r') 
    content = f.read() 
    if not callable(func): 
      return 
    #deal with thing  
    func(content) 
  except IOError, e: 
    print 'Error %s' % str(e) 
  finally: 
    if f:  
      #tear thing down 
      f.close() 
def test(): 
  controlled_execution(output) 
test() 

          

?
方法2:

用yield實現一個只產生一項的generator。通過for - in 來循環。

代碼片段如下:

            
#yield solution 
def controlled_execution(): 
  f = None 
  try: 
    f = open(filename, 'r') 
    thing = f.read() 
    #for thing in f: 
    yield thing 
  except IOError,e: 
    print 'Error %s' % str(e) 
  finally: 
    if f:  
      f.close() 
def test2(): 
  for content in controlled_execution(): 
    output(content) 

          

?

方法3:

用類的方式加上with實現。

代碼片段如下:
?

            
#class solution 
class controlled_execution(object): 
  def __init__(self): 
    self.f = None 
  def __enter__(self): 
    try: 
      f = open(filename, 'r') 
      content = f.read() 
      return content 
    except IOError ,e: 
      print 'Error %s' % str(e) 
      #return None 
  def __exit__(self, type, value, traceback): 
    if self.f: 
      print 'type:%s, value:%s, traceback:%s' % \ 
          (str(type), str(value), str(traceback)) 
      self.f.close() 
def test3(): 
  with controlled_execution() as thing: 
    if thing: 
      output(thing) 
 

          

方法4:

用with實現。不過沒有exception handle 的功能。

            
def test4(): 
  with open(filename, 'r') as f: 
    output(f.read()) 
 
  print f.read() 

          

?最后一句print是用來測試f是否已經被關閉了。

??? 最后總結一下,寫這篇文章的目的主要是受了一句話的刺激:“使用語言的好特性,不要使用那些糟糕的特性”!python真是有很多很優雅的好特性,路漫漫其修遠兮,吾將上下而求索。。。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 手机看片国产日韩 | 欧美一级视频 | 97婷婷狠狠成人免费视频 | 另类小说综合 | 伊人午夜视频 | 色婷婷六月天 | 婷婷综合网站 | 欧美aⅴ| 国产尤物视频 | 日韩精品在线一区 | 欧美精品综合 | 亚洲国产一区二区三区四区色欲 | 成人免费看黄网站yyy456 | 国产成人精品一区二区三区电影 | 亚洲视频免费在线播放 | 中文久久| 丁香六月综合 | 亚洲六月丁香色婷婷综合久久 | 理论片午午伦夜理片在线播放 | 最新一区二区三区 | 波多野结衣亚洲一区二区三区 | 99热播放 | 一区二区三区四区在线观看视频 | 亚洲精选一区 | 国产综合亚洲精品一区二 | 成人国产精品免费观看视频 | 亚洲一区中文字幕 | 亚洲精品欧美一区二区三区 | 四虎国产成人免费观看 | 毛片免费大全短视频 | 激情丁香六月 | 欧美成人免费全网站大片 | 夜夜cao| 国产一级做a爰片在线 | 一个色综合网 | 性夜影院爽黄e爽在线观看 苏晓晖个人简介军衔 | 九九九久久国产免费 | 久久精品男人 | www97影院| 久久最新 | 久久亚洲日本不卡一区二区 |