Python基础 常用内建模块
来源:互联网 发布:手机借款软件 编辑:程序博客网 时间:2024/05/23 18:41
回顾 with的语句
普通的读文件
# 读写文件的一般方式def safeFun(): try: f = open("路径", "r") r.read() finally: if f: f.close
whit语句的读文件
# 简易版读写方式,不用担心忘记closedef easySafeFun(): with open("路径", "r") as f: f.read()
民间 with 语句
自定义 with 语句
# 让老百姓也能使用with的语句class Query(object): def __init__(self, name): self.name = name # whit语句需要 def __enter__(self): print("enter") return self # whit语句需要 def __exit__(self, exc_type, exc_value, traceback): if exc_type: print("Error") else: print("End") def query(self): print("查询信息为 %s" % (self.name))
官方 with 语句 - contextlib 模块
@contextmanager让我们通过编写generator来简化上下文管理。
运行示例
#!/usr/bin/env python3# -*- coding: utf-8 -*-# Python基础 常用内建模块 - contextlibfrom contextlib import contextmanagerclass EasyQuery(object): def __init__(self, name): self.name = name def query(self): print("查询信息为 %s" % (self.name)) # @contextmanager这个decorator接受一个generator,用yield语句把with ... as var把变量输出出去,然后,with语句就可以正常地工作了 @contextmanager def creat_query(name): print("霸气开始") q = EasyQuery(name) # 有yield关键字就表示该函数是generator函数了 # 作为回报 print(b)写成 yield(b) # 遇到 yield 语句返回 yield q print("霸气结束")def easyQueryHaveWitchTest(): with EasyQuery.creat_query("王大锤") as q: # 运行结果 # 霸气开始 # 查询信息为 王大锤 # 霸气结束 q.query()easyQueryHaveWitchTest()
运行结果
D:\PythonProject\sustudy>python main.py霸气开始查询信息为 王大锤霸气结束
@contextmanager
我们希望在某段代码执行前后自动执行特定代码,也可以用@contextmanager实现
运行示例
#!/usr/bin/env python3# -*- coding: utf-8 -*-# Python基础 常用内建模块 - contextlibfrom contextlib import contextmanager# 我们希望在某段代码执行前后自动执行特定代码,也可以用@contextmanager实现@contextmanagerdef tag(): print("----前----") yield print("----后----")with tag(): print("小美") print("大锤")
运行结果
D:\PythonProject\sustudy>python main.py----前----小美大锤----后----
代码的执行顺序是:
1. with语句首先执行yield之前的语句,因此打印出print(“—-前—-“);
2. yield调用会执行with语句内部的所有语句,因此打印出 print(“小美”) 和 print(“大锤”) ;
3. 最后执行yield之后的语句,打印出print(“—-后—-“)。
closing()语句
运行示例
closing 让没有对象上下文,变成有对象上下文,从而使用 whith语句
#!/usr/bin/env python3# -*- coding: utf-8 -*-# Python基础 常用内建模块 - contextlibfrom contextlib import contextmanager,closingfrom urllib.request import urlopen# closing让没有对象上下文,变成有对象上下文,从而使用 whith语句with closing(urlopen("https://www.python.org")) as page: for line in page: print(line)
具体原理
# closing 的原型如下 @contextmanagerdef easyClosing(thing) try: yield thing finally: thing.close()
阅读全文
0 0
- Python基础-常用内建模块 datetime
- Python基础-常用内建模块 collections
- Python基础 常用内建模块
- Python基础 常用内建模块
- Python常用内建模块
- Python 常用内建模块
- python常用内建模块
- 【学习笔记】Python基础 常用内建模块
- Python常用内建模块之hashlib
- Python常用内建模块(datetime)
- python 内建模块
- python学习笔记(十二) - 常用内建模块
- python笔记7--常用的内建模块
- Python之学习笔记(常用内建模块)
- Python学习:常用内建模块(2)struct,hashlib.md5
- Python学习 (十 常用内建模块)
- Python常用内建模块——学习笔记
- 【Python】学习笔记——-13、常用内建模块
- 经典Mysql-cluster数据库集群搭建(linux)
- 分治法
- Jmeter分布式部署
- Mysql读写分离集群中间件—Atlas完美配置,So easy!5分钟搞定!Oracle数据库SQL优化方法案例
- linux用公钥免密码登录
- Python基础 常用内建模块
- 为什么学习Python以及Python的安装
- java中的length属性,length()方法,size()方法
- 微信小程序服务器端部署好后报错,后台无法进入登录界面
- ssm整合shiro后,遇到ajax请求的处理
- 【头条】赛门铁克预测2018年新技术攻击将成为主流
- 快速排序 c++实现2.0
- 颜色大全
- JS/JavaScript中两个等号 == 和 三个等号 === 的区别