Python|你在滥用Python吗?初学者常会遇到的5个情景( 二 )
name = 'John'surname = 'Doe'full_name = '{name {surname'.format(name=name surname=surname)
3.读写文件时
若要使用Python读写文件 , 首先需要用内置的open函数打开文件 。 打开文件 , 读取或写入内容以及关闭文件 。 进行操作时 , 可能会出现一些问题 , 比如忘记关闭文件和异常处理失败 。
操作完成后 , 若忘记关闭文件会导致后续问题 。 比如 , 如果在写入文件后忘记关闭该文件 , 那么写入操作将不会保存至文件中 , 并且在文件仍然保持打开状态时 , 你将保留在计算机中分配的资源 。 如果在处理文件时 , 没有手动处理异常和错误 , 那么文件将保持打开的状态 。
f = open(file='file.txt' mode='r')lines = f.readlines()
...
f.close()
建议在打开文件时使用with关键字 。 with是一个上下文管理器 , 它能封装代码并能确保自动处理异常 。 比如 , 当你读写文件时 , with-body中可能出现的任何故障 , 都能自动处理异常 , 并且始终保持该文件关闭 。
with open('file.txt') as f:
read_data = https://mparticle.uc.cn/api/f.read()
...
如果跳过with时 , 你需要自己处理一切 , 关闭文件和异常处理都得亲自处理 。 with会让你的生活更轻松 , 让情况得以控制 。
图源:unsplash
4.跳过生成器时
在许多情景中 , 你需要生成一个值列表 , 稍后将在脚本中使用这些值 。 比如 , 你需要为前100个数字生成所有3个数字的组合 。
combinations = [
value = https://mparticle.uc.cn/api/100for i in range(value):
for j in range(value):
for k in range(value):
combinations.append((i jk))
当执行的命令完成时 , 列表组合将包含1M元组 , 每个元组有3个整型值 。 这些值将保存在内存中 , 直到被删除 。 使用sys模块中的getobjectsize函数检查对象大小 , 结果为8.29MB 。
不再使用列表存储值并将它们全部保存至内存 , 可以创建一个生成器 , 每当你使用它时 , 将生成1个组合 。 这能减少内存消耗并提高运行速度 。
defgenerate_combinations_of_three(value): for i in range(value): for j in range(value): for k in range(value): yield (i j k)gen =generate_combinations_of_three(100)next(gen) # yields (0 0 0)next(gen) # yileds (0 0 1)...
所以 , 尽可能多地使用生成器 。 时刻牢记内存容量是有限的 , 并尽可能优化内存使用 。 请使用生成器 , 特别是在开发可伸缩的解决方案时 。
5.使用推导式时
有一些程序员 , 他任何用Python编写代码都遵循Python之禅(The Zen of Python)的准则 。 如果是使用Python的新手 , 可能会倾向于夸大Python之禅的某些观点 , 而在其他方面避重就轻 。
这一点在逐渐了解推导式时最容易注意到——你倾向于翻译推导式中的“每一个”循环 。 假设你有一个三维的数字矩阵 , 你很可能会想将其平面化 。
matrix = [[[ 1 2 3
[ 4 5 6
[ 7 8 9
[[ 10 20 30
[ 40 50 60
[ 70 80 90
使用列表推导式 , 平面化过程如下:
- 风月无关|谁还用Word啊,Python编辑公式竟可以如此简单
- 智能手机那点事|内行人较为喜爱,这四款你在用哪款?,几乎无差评的华为手机
- Python爬虫与数据挖掘|Mobile做相册,手把手教你用jQuery
- 江湖车侠|pandas使用技巧,快速入手python数据挖掘(二)
- 马维英|我只相信数字!Java, 大数据,Python哪个前景更好,薪资更高?
- 及时行乐|原理+代码|深入浅出Python随机森林预测实战
- 小米科技|6月份最受欢迎编程语言:Python取代Java,Rust进入前20名
- CDA数据分析师|为什么要有 pass 语句?,Python
- 津爱改装车|你在滥用Python吗?初学者常会遇到的5个情景
- 华为|送一单外卖赚4毛5,你在美团付的配送费,在帮这家公司上市?