鱼C论坛

 找回密码
 立即注册
查看: 1450|回复: 2

[已解决]python 中的with语句。

[复制链接]
发表于 2018-4-10 22:47:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼介绍的好简单 就是帮你自动关闭文件

但是我百度了下
里面解释的好复杂 with 要跟 as
还有什么上下文管理器

谁能简单易懂的 解释下with语句
最佳答案
2018-4-10 23:29:06
简单理解就是with会在开始和结束帮你做一些事。
这些事有可能python已经帮你做了比如open(),python帮你打开了文件,并返回文件对象,可以通过as来接收,然后结束时帮你close文件。
这些开始和结束的事情也可以是你自己定义的,with会自动调用对象的__enter__和__exit__方法。比如
  1. class A(object):
  2.     def __init__(self, case):
  3.         self.name = "my name"
  4.         self.case = case

  5.     def __enter__(self):
  6.         print("开始的时候做点什么")
  7.         if self.case == 1:
  8.             return self  # 返回对象本身
  9.         if self.case == 2:
  10.             return "这里是as得到的值,可以用as接收也可以不接收"
  11.         if self.case == 3:
  12.             pass  # 啥也不返回

  13.     def __exit__(self, exc_type, exc_val, exc_tb):
  14.         print("结束的时候做点什么")


  15. if __name__ == '__main__':
  16.     with A(1) as a:
  17.         # case == 1
  18.         print(a.name)

  19.     with A(2) as a:
  20.         # case == 2
  21.         print(a)

  22.     with A(3):
  23.         # case == 3
  24.         pass
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-10 23:01:26 | 显示全部楼层
with  as 就是成对出现的。

就打开文件而 言
with 要返回一个上下文管理器对象 as 变量
语句块

退出语句块,用with操作的对象就自动关闭。

就这么简单,不要想的太复杂。要返回一个上下文管理器对象不一定就是open() 这个。还可以是别的对象
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 23:29:06 | 显示全部楼层    本楼为最佳答案   
简单理解就是with会在开始和结束帮你做一些事。
这些事有可能python已经帮你做了比如open(),python帮你打开了文件,并返回文件对象,可以通过as来接收,然后结束时帮你close文件。
这些开始和结束的事情也可以是你自己定义的,with会自动调用对象的__enter__和__exit__方法。比如
  1. class A(object):
  2.     def __init__(self, case):
  3.         self.name = "my name"
  4.         self.case = case

  5.     def __enter__(self):
  6.         print("开始的时候做点什么")
  7.         if self.case == 1:
  8.             return self  # 返回对象本身
  9.         if self.case == 2:
  10.             return "这里是as得到的值,可以用as接收也可以不接收"
  11.         if self.case == 3:
  12.             pass  # 啥也不返回

  13.     def __exit__(self, exc_type, exc_val, exc_tb):
  14.         print("结束的时候做点什么")


  15. if __name__ == '__main__':
  16.     with A(1) as a:
  17.         # case == 1
  18.         print(a.name)

  19.     with A(2) as a:
  20.         # case == 2
  21.         print(a)

  22.     with A(3):
  23.         # case == 3
  24.         pass
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-10 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表