微信号:grzlwx

介绍:光荣之路官方资讯

编写高质量代码--改善python程序的建议(四)下

2016-01-15 23:21 光荣之路

吴老的《selenium webdriver 实战宝典》出版了!

建议二十一:使用with自动关闭资源
with语句的语法为:

with exp1 [as target]:
code...

#嵌套
with expr1 as e1:
with expr2 as e2
等价于
with expr1 as e1, expr2 as e2

with语句可以在代码块执行完毕后进入该代码块时的现场,执行过程如下:

  • 计算表达式的值,返回一个上下文管理器对象

  • 加载上下文管理器对象的__exit__()方法以备后用

  • 调用上下文管理器对象的__enter__()方法

  • 如果with语句中设置了目标对象,则将__enter__()方法的返回值复制给目标对象

  • 执行with中的代码块

  • 如果步骤5中代码正常结束,调用上下文管理器对象的__exit__()方法,其返回值忽略

  • 如果步骤5中代码执行过程中发生异常,调用上下文管理器对象的__exit__()方法,并将异常类型、值及traceback信息作为参数传递 给__exit__()方法,如果__exit__()返回值为false,则异常值会被重新抛出;否则挂起异常,程序继续执行。

上下文管理器:用来创建一个运行时的环境,是一个对象,定义程序运行时需要建立的上下文,处理程序的进入和退出,实现了上下文管理协议,即在对象中定义了__enter__()和__exit__()方法:

  • enter():进入运行时的上下文,返回运行时上下文相关的对象

  • exit(exception_type, exception_value, traceback):退出运行时的上下文,定义在块执行(或终止)之后上下文管理器应该做什么。


建议二十二:使用else子句简化循环(异常处理)
在python中,不仅分支语句有else子句,循环语句和异常处理也有。
首先看循环语句中的else,语法为:

#while循环
"while" expre ":" suite
["else" ":" suite]
#for循环
"for" target_list "in" expre_list ":" suite
["else" ":" suite]

具体不再赘述,下面两端代码具有同样的功能,可以进行比较。

def print_prime(n):
for i in xrange(2, n):
found = True
for j in xrange(2, i):
if i % j == 0:
found = False
break
if found:
print i
def print_prime2(n):
for i in xrange(2, n):
for j in xrange(2, i):
if i % j == 0:
break
else:
print i

和循环语句中的else相似,异常处理也提供了else子句语法,直接看例子

def save(db, obj):
try:
db.execute('a sql stmt', obj.attr1)
db.execute('another sql stmt', obj.attr2)
except DBError:
db.rollback()
esle:
db.commit()
def save(db, obj):
some_error_occured = False
try:
db.execute('a sql stmt', obj.attr1)
db.execute('another sql stmt', obj.attr2)
except DBError:
db.rollback()
some_error_occurred = True
if not some_error_occured:
db.commit()

总结:本篇列举了python的一些基础语法使用建议和注意事项,慢慢消化

参考:编写高质量代码--改善python程序的91个建议

不向静中参妙理,纵然颖悟也虚浮 立乎其大 和而不同 古之成大事者,不惟有超世之才,亦必有坚韧不拔之志

相关阅读:

编写高质量代码–改善python程序的建议(一)

编写高质量代码–改善python程序的建议(二)

编写高质量代码–改善python程序的建议(三)

编写高质量代码--改善python程序的建议(四)

(作者:cotyb 来源:http://www.cnblogs.com/cotyb/p/5104034.html)

公益传播测试知识、技能与正能量!感谢作者!
分享测试生活,思考测试人生!欢迎投稿!
文章图片来自网络,如有侵权请见谅,请联系我们妥善处理。
735821166@qq.com

光荣之路
软件测试培训


官网:www.gloryroad.cn

微信公众号:gloryroadtrain

性能测试QQ群:415987441
测试招聘QQ群: 203715128
自动化3群QQ: 371211499

Python群:457561756

 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 即使被拖库,也可以保证密码不泄露 警惕智能设备!那些可能在你家中上演的“窃听风暴” 普及、开放与平台:大数据价值运营之路(中) 大型网站系统架构的演化 IT职场新人必看