Python with常见用法以及详解

Python with语句详解:文件操作、上下文管理及实战应用
本文详细解析了with语句在Python中的原理,包括如何利用with自动管理文件资源,以及它作为上下文管理器的工作机制。通过实例介绍了常见的使用场景,如文件操作、数据库连接和线程同步。

在面试中被问到:with原理?常见用法是什么?有哪些使用场景?由于事先没有刷面试题,当时那个懵,只回答了常用with来打开文件,事后回想,懊恼不已,由此有了这篇文章,用以记录。

1、with 打开文件

在没用到with时,打开文件(不考虑文件大小)代码如下:

try:

    f = open(file, 'r')

    f.read()

finnaly:

    f.close()

使用with代码:

with open(file, 'r') as f:

    f.read() 

如上代码可见,使用with时代码中不用关闭文件了,那文件关闭是怎么完成的呢?其实是__exit__()来完成的。

2、with 上下文管理器

with 后面必须是上下文管理器,上下文管理器我理解就是有__enter__()方法和__exit__()方法的类的实例化对象。

with 上下文管理器 as variable/tuple:

        执行语句

执行顺序如下:

1、with后面代码执行,生成上下文管理器;

2、将__enter__()方法的返回值赋值给as后的变量或者元组(注意:不能是逗号隔开的多个变量);

3、不管执行语句代码是否有异常,都会执行__exit__()方法,例如释放资源等。如果出现异常,则 sys.exc_info()的type、value、traceback会当做参数传给__exit__(),然后程序结束;如果没有异常,则返回None给__exit__()。重点:如果出现异常,但__exit__()返回类似True,那么异常不会被抛出的。

3、常见用法

1、打开文件

2、数据库连接操作,将数据库出现异常的情况放在__exit__()中处理

3、控制线程锁的获取和释放

4、欢迎大家补充

### Python 中 `filename` 的用法及相关示例 在 Python 编程中,`filename` 是指文件名字符串,通常用于打开、读取、写入或操作文件的操作。以下是关于 `filename` 在不同场景下的常见用法及其相关示例。 #### 文件的基本操作 Python 提供了一个内置函数 `open()` 来处理文件的创建、读取和写入等基本操作。该函数的第一个参数即为 `filename`,表示要操作的目标文件路径[^1]。 ```python # 打开一个名为 example.txt 的文件并读取其内容 with open('example.txt', 'r') as file: content = file.read() print(content) # 创建一个新的文件并将数据写入其中 data_to_write = "This is some data to write into the file." with open('output.txt', 'w') as file: file.write(data_to_write) ``` 以上代码展示了如何使用 `filename` 参数来指定目标文件,并分别演示了文件的读取和写入功能。 #### 使用模块中的 `filename` 除了基础的文件操作外,在某些特定情况下,`filename` 还可以作为其他库或工具的一个重要输入参数。例如: - **日志记录** 当配置 Python 日志系统时,可以通过设置 `FileHandler` 将日志消息保存到指定的文件中[^1]。 ```python import logging logging.basicConfig( level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', handlers=[logging.FileHandler('app.log')] ) logging.info("An informational message.") ``` 在此例子中,`filename="app.log"` 被传递给 `FileHandler` 类实例化对象,从而定义了存储日志的位置。 - **内存分析器 Pyrasite** 如果需要调试程序运行期间产生的内存泄漏问题,则可能需要用到像 pyrasite 这样的第三方工具。它允许开发者生成 JSON 格式的报告文件以便进一步审查泄露情况[^2]。 ```bash touch /tmp/pyrasite-75055-objects.json pyrasite-memory-viewer --pid=75055 --file=/tmp/pyrasite-75055-objects.json ``` 这里 `/tmp/pyrasite-75055-objects.json` 即代表由命令行选项 `-f/--file` 明确指出的目的地文件名称。 #### 高级应用案例——图表绘制 对于数据分析领域而言,有时还需要借助外部 JavaScript 库(如 Highcharts)完成可视化工作。此时 python-highcharts 可作为一个桥梁连接两者之间的交互过程[^3]。 假设我们希望基于一组股票价格历史数据构建 K 线图展示趋势变化状况的话,那么整个流程大致如下所示: ```python from highcharts import Highstock from datetime import datetime hs = Highstock() options = { 'rangeSelector': {'selected': 1}, } data = [ [datetime(2023, 9, i).timestamp() * 1000, 100 + i*2, 100 + i*3, 99 + i*1.5, 101 + i*.5] for i in range(1, 6) ] hs.add_data_set(data, 'candlestick') hs.set_dict_options(options) hs.save_file('kline_chart') ``` 最终会导出命名为 kline_chart.html 的 HTML 文档形式呈现出来。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py_op_dev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值