零基础学 Python(2018 版)
尹会生
前游戏公司技术总监,前新浪网技术经理
80141 人已学习
新⼈⾸单¥68
课程目录
已完结/共 72 讲
第一章 :Python介绍和安装 (3讲)
第二章 :Python基础语法 (3讲)
第四章 :条件与循环 (5讲)
第五章 :映射与字典 (2讲)
第六章 :文件和输入输出 (2讲)
第七章 :错误和异常 (1讲)
第九章 :模块 (1讲)
第十章 :语法规范 (1讲)
第十一章 :面向对象编程 (4讲)
第十二章 :多线程编程 (2讲)
第十六章 :综合案例 & 结课测试 (1讲)
特别放送 (1讲)
零基础学 Python(2018 版)
登录|注册
留言
18
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 38 | 类的使用-自定义with语句
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | Python语言的特点
02 | Python的发展历史与版本
03 | Python的安装
04 | Python程序的书写规则
05 | 基础数据类型
06 | 变量的定义和常用操作
07 | 序列的概念
08 | 字符串的定义和使用
09 | 字符串的常用操作
10 | 元组的定义和常用操作
11 | 列表的定义和常用操作
12 | 条件语句
13 | for循环
14 | while循环
15 | for循环语句中的if嵌套
16 | while循环语句中的if嵌套
17 | 字典的定义和常用操作
18 | 列表推导式与字典推导式
19 | 文件的内建函数
20 | 文件的常用操作
21 | 异常的检测和处理
22 | 函数的定义和常用操作
23 | 函数的可变长参数
24 | 函数的变量作用域
25 | 函数的迭代器与生成器
26 | Lambda表达式
27 | Python内建函数
28 | 闭包的定义
29 | 闭包的使用
30 | 装饰器的定义
31 | 装饰器的使用
32 | 自定义上下文管理器
33 | 模块的定义
34 | PEP8编码规范
35 | 类与实例
36 | 如何增加类的属性和方法
37 | 类的继承
38 | 类的使用-自定义with语句
39 | 多线程编程的定义
40 | 经典的生产者和消费者问题
41 | Python标准库的定义
42 | 正则表达式库re
43 | 正则表达式的元字符
44 | 正则表达式分组功能实例
45 | 正则表达式库函数match与search的区别
46 | 正则表达式库替换函数sub()的实例
47 | 日期与时间函数库
48 | 数学相关库
49 | 使用命令行对文件和文件夹操作
50 | 文件与目录操作库
51 | 机器学习的一般流程与NumPy安装
52 | NumPy的数组与数据类型
53 | NumPy数组和标量的计算
54 | NumPy数组的索引和切片
55 | pandas安装与Series结构
56 | Series的基本操作
57 | Dataframe的基本操作
58 | 层次化索引
59 | Matplotlib的安装与绘图
60 | 机器学习分类的原理
61 | Tensorflow的安装
62 | 根据特征值分类的模型和代码
63 | 网页数据的采集与urllib库
64 | 网页常见的两种请求方式get和post
65 | HTTP头部信息的模拟
66 | requests库的基本使用
67 | 结合正则表达式爬取图片链接
68 | Beautiful Soup的安装和使用
69 | 使用爬虫爬取新闻网站
70 | 使用爬虫爬取图片链接并下载图片
强势回归:零基础学Python2022版来啦!
71 | 如何分析源代码并设计合理的代码结构&结课测试
本节摘要

课程源码、课件及课后作业地址:

https://gitee.com/geektime-geekbang/geekbangpython

登录 后留言

全部留言(18)

  • 最新
  • 精选
硕杨Sxuya
我自己编写的解释demo,可能更好理解吧,新手就是不知道代码里面到底是什么,总是简称代指,真的着急费解。 一直无法理解demo就是demo为什么非要那么简单呢?太简单了理解就多了,只有信息冗余、互相关联,才能表达明确的意思。 class AClassWithWith(): def __init__(self): pass def __enter__(self): print("1.现在进入了,所以马上到这里,执行 __enter__ 这里的代码") def __exit__(self, exc_type, exc_val, exc_tb): print("2.结束使用这个 class 时,会执行这里面的代码,用打印内容代替") with AClassWithWith(): print("3.这里的内容是class之外的操作,是在开始确认使用类AClassWithWith、执行 __enter__ 后才执行的,") print("4.执行完之后,就自动执行结束的 __exit__ 里面的内容,什么呢?如下:")

作者回复: 考驾照为什么要了解发动机的原理呢? 先学会把车发动、开的走、停的下才是这个阶段最需要关注的事情。 会开车了还要不要了解发动机的原理呢? 因为要了解不同的发动机的不同特性。 demo掺杂了其他的功能就会给第一次接触这个功能的人带来技术债,当理解了这个知识的的why和what的时候,才来到第二步,利用搜索引擎文档社区这些工具把以前的知识连接起来。

2018-10-10
4
14
硕杨Sxuya
最直接的一个例子就是,程序本来就正常运行,却写一句程序正常运行“test is running”,那最后的提示是程序本身的情况,还是人为的字符串,2选1,实在是费解。

作者回复: 提示信息太过简略,没有起到学习的辅助作用,反倒给学习增加了难度;理解了,后续内容会在这方面做优化的,感谢硕杨同学。

2018-10-10
2
7
Nowz
不明白with在这里的这个用法是什么作用。try的做法至少捕获异常,有针对处理。不太明白with在这里做了什么?

作者回复: with 关键字 用于对try except finally 的优化,让代码更加美观,书写更简单。例如: f=open('file.txt','r') try: r=f.read() except: pass finally: f.close() 可以改写成 with open('file.txt','r') as f: r=f.read()

2018-09-14
3
煎蛋
老师我咨询下: class Demo_1(): def __enter__(self): print("start_1") def __exit__(self, exc_type, exc_val, exc_tb): if exc_tb is None: print("end_1") else: print("is %s" %exc_tb) with Demo_1(): raise NameError("is a name") print("春雨") 这段代码执行后会有红色报错提示嘛,视频中说with帮我们处理了try except 的工作,但是那章节中,报错是最后被expect处理了,转化成了我们自己的提示而不报红了,在with中怎么体现这个点呢?

作者回复: with的本质是try except, 需要处理多个异常的时候可以使用多个except,看看从这个思路入手能不能帮你理解这个概念

2019-01-03
2
Mr wind
老师,在python例子中我们自定义with语句实现的exit方法其实就是finally吧,但是本质上异常还是被抛出去了,从异常代码处程序中断。 另外with open(file)语句的功能就是无论如何finally中帮我们close了资源,这点和java的try with resource语句有点像。不过总之with语句中异常是并没有被处理掉的,真正要吞掉异常还是需要我们去抓取异常(except)并处理。不知道我这样理解对不对

作者回复: 首先 exit魔术方法 就是finally要做的事情,with语句实现了而已,如果自己需要累死功能实现__exit__()就好 使用with open方式 打开的文件不用再去处理文件异常,其他的异常还是要处理的

2020-02-01
1
殷忧舞叶
老师好,有点不太理解的是 输出结果test is running执行前的那句trackback{most recent call last}: raise抛出异常不是在print("test is running")之后吗?trackback{most recent call last}:为什么会出现在test is running之前呢?还是trackback{most recent call last}:其实是其他含义?

作者回复: 处理异常栈的模块是traceback模块, 默认是在抛出异常的第一行打印的,这里不存在先后顺序,一定是第一行输出的

2020-04-21
隰有荷
老师,这个with后面直接跟的是一个类,那么如果在实例化该类的对象时,该怎么用with? 比如: a=A() try: a. func() except Exception as e: pass 上述操作如何使用with?

作者回复: 1 在A类中实现 __enter__()和__exit__() ,支持with 2 在A类中实现__call__() 支持调用 这样就可以使用 with A() as a: pass 形式了

2020-02-09
3
汤撒
class WithTest: def __init__(self, name): self.name = name def __enter__(self): print('enter the test function') return self def do_run(self): print('run the test function', self.name) def __exit__(self, exc_type, exc_val, exc_tb): if exc_tb is None: print('finish the WithTest function') else: print('has error: %s' % exc_tb) with WithTest('tang') as w: w.do_run() 老师您好,我发现这段代码里面,如果__enter__没有吧self返回回去,w就是一个空类型,我理解这些初始化、进入等函数应该是class生命周期中的模版方法?那么,我的疑问是,那些方法必须要返回self,那些方法不能返回(比如__init__),如何判断?比如Java,会有定义返回值类型等,python没有定义,我怎么能知道一个函数是否需要返回值呢?

作者回复: 1 如果__enter__没有吧self返回回去,w就是一个空类型, 不写return也会返回NULL 2 函数返回什么类型,什么值要编写函数的人确定,标准的写法都会有help() ,即用help(函数/类)可以查看定时的时候的帮助

2019-07-18
海绵宝宝
在__exit__里面怎么把出现的异常捕获处理呢?

作者回复: def __exit__(self, exc_type, exc_value, traceback): return True exit带了4个参数,通过exc_type 来判断要捕获的异常,如: if exc_type == IndexError: print(exc_value)

2019-07-03
Archyomi
老师,前面装饰器的用法是不是可以实现 with 的效果,如果是的话,两者有什么区别呢

作者回复: 完全可以用with实现,前面是为了给大家讲解with实现的底层原理,比如with open() 要比自己写异常捕获优雅

2019-02-10
收起评论