目录
- 瞎比比
- 聊聊为什么要用 with、contextlib
- 举个栗子
- with、contextlib 原理
- 常见的 with 用例
瞎比比
本文源码地址:
https://github.com/zonezoen/blog/tree/master/python/interview
最近秋招就要到了,我准备了 Python 面试的一系列专题,涉及到 Python 的一些高级用法,例如:垃圾回收机制、装饰器、上下文管理器等等。希望在秋招路上助你一臂之力。
聊聊为什么要用 with、contextlib
通常情况下,我们在做一些资源操作的时候,都要做 open 和 close 等相关的操作,为的就是使用完资源之后,及时清理不用的资源,避免占用内存。例如,典型的数据库操作:
conn = pymysql.connect()cur = conn.cursor()sql = "INSERT INTO `users` (`name`, `password`, `age`, `sex`) VALUES (%s, %s, %s, %s)"cur.execute(sql)conn.commit()cur.close()conn.close()
如果我们经常操作一些资源,那是不是就得经常做一些重复的操作?甚至有时候,我们忘记进行资源回收操作,导致内存泄露,或许可能会导致线上事故。那我们有什么操作能够处理这些麻烦,或者说有什么一劳永逸的方法吗?答案是有的,正是此文的标题,且往下看。
举个栗子
我先来举个栗子吧,看看这个 with、contextlib 究竟是怎么方便的,且看下面的代码。建议你在看完 with、contextlib 原理之后,再一次回看这些栗子,你会有收获的。
class MysqlDb(): def __init__(self, database, host="localhost