1 | <python 2.7> |
1 | @with_connection |
1 | with db.connection(): |
上下两个代码片的作用是一样的,关于数据库操作的,都使用了with语法,只不过上边的使用了装饰器,更加方便了。
<装饰器>
动态增加代码功能,定义一个who的装饰器:
1 | import functools |
使用时:
1 | @who |
结果:
1 | <我是小菜> |
关于@functools.wraps(fund)
的作用是:
因为在原函数外加了一层wrapper,所以调用beatDoudou.__name__
时,返回的是wrapper,并不是beatDoudou,避免有些依赖函数签名的代码执行出错。
带参数的装饰器
1 | import functools |
使用时:
1 | @who |
结果:
1 | <我是大鸟> |
1 |
|
1 |
|
with语法作用1
2
3
4with db.connection():
db.select('...')
db.update('...')
db.update('...')
三个数据库操作成为语句块,在执行之前,先执行上下文管理器的enter函数,即获得数据库连接;在执行完语句块之后,再执行exit函数,即释放数据库连接。
with语句执行过程类似如下:
1 | 以下代码来自[这里](https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/) |
ps:markdown编辑器有bug吧,有些内容显示不出来,只好改成代码片才可以,所以排版有点乱,sorry