由于之前有一个项目老是要打开文件,然后用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真是有很多很优雅的好特性,路漫漫其修远兮,吾将上下而求索。。。
分享到:
相关推荐
Python从入门到进阶知识手册1885页Python从入门到进阶知识手册1885页Python从入门到进阶知识手册1885页Python从入门到进阶知识手册1885页Python从入门到进阶知识手册1885页Python从入门到进阶知识手册1885页Python从...
1. df.shape :查看数据表的维度 2. df.info() :查看数据表的整体信息 3. df.dtypes:可以一次性查看数据表中所 有数据的格式,
Python教程-程序编程进阶2.pdf
Python面向对象进阶教程
文档中有最基础的python实例,有助于python入门的学习。
老王python基础+进阶+项目 视频教程(附习题)(内涵链接)
Python教程-程序编程进阶3.pdf
Python进阶
Python语言进阶Python语言进阶Python语言进阶Python语言进阶Python语言进阶Python语言进阶Python语言进阶
笨办法学python的进阶篇,原作者的又一力作。许多人就是通过笨办法学python入门这个语言的。想要进阶还是选笨办法,因为笨办法往往更快
Python-matplotlib进阶
Python入门+进阶 更快上手实际开发==百度云盘版
Python语言目前是容易学习的语言,而且是前景最好的语言,感兴趣的朋友可以下载学习
老王python基础+进阶+项目视频教程 老王python基础+进阶+项目视频教程
python3实用编程技巧进阶(1套课程)\第3章-4 5 PYTHON切片操作 Python课程 教程 进阶 0基础学习
python3实用编程技巧进阶(1套课程)\第3章-1 2PYTHON迭代器 Python课程 教程 进阶 0基础学习
python3实用编程技巧进阶(1套课程)\第2章2-5PYTHON公共键 Python课程 教程 进阶 0基础学习
Python编程:从入门到实践.pdf + Python数据科学手册.pdf 两本书籍包含python入门与进阶 都是高清带书签版本 很好地python学习丛书
python3实用编程技巧进阶(1套课程)\第4章-1 PYTHON拆分字符串 Python课程 教程 进阶 0基础学习
python 入门到进阶 学习总结 基础入门 从零到一 一学就会