下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 38 | 类的使用-自定义with语句
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

零基础学Python

共71讲 · 71课时·约540分钟
16024
免费
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与s...
46 | 正则表达式库替换函数sub...
47 | 日期与时间函数库
48 | 数学相关库
49 | 使用命令行对文件和文件夹...
50 | 文件与目录操作库
51 | 机器学习的一般流程与NumP...
52 | NumPy的数组与数据类型
53 | NumPy数组和标量的计算
54 | NumPy数组的索引和切片
55 | pandas安装与Series结构
56 | Series的基本操作
57 | Dataframe的基本操作
58 | 层次化索引
59 | Matplotlib的安装与绘图
60 | 机器学习分类的原理
61 | Tensorflow的安装
62 | 根据特征值分类的模型和代...
63 | 网页数据的采集与urllib库
64 | 网页常见的两种请求方式ge...
65 | HTTP头部信息的模拟
66 | requests库的基本使用
67 | 结合正则表达式爬取图片链...
68 | Beautiful Soup的安装和...
69 | 使用爬虫爬取新闻网站
70 | 使用爬虫爬取图片链接并下...
71 | 如何分析源代码并设计合理...
本节摘要

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

https://github.com/wilsonyin123/geekbangpython

精选留言(12)

  • 2018-10-10
    我自己编写的解释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的时候,才来到第二步,利用搜索引擎文档社区这些工具把以前的知识连接起来。

    9
  • 2018-10-10
    我的意思是代码的解释太抽象简化了,简化到都和概念变成一样,本来是有区分度的东西,硬生生的把它变成了没太大区分度的东西。
    学习知识不就是应该需要在一定的情景下才能够更好的理解其中的运用逻辑,而这个演示完全把背景全抽没掉了,就好像空中阁楼一样,生活中根本没有完全无法想象到底有什么用。
    就像举例的学开车,只要知道转、启动、停就好了,但是不给学习的人看车的样子,就说一个刹车方向盘的概念,他也完全摸不着头脑呀。一个人从来没有见过汽车长什么样,你就说去踩刹车,他完全不知道去踩这个动作意味着什么。
    展开
    5
  • 2018-10-10
    最直接的一个例子就是,程序本来就正常运行,却写一句程序正常运行“test is running”,那最后的提示是程序本身的情况,还是人为的字符串,2选1,实在是费解。

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

    3
  • 2019-11-26
    信息冗余有好有坏,不懂的人要的是你告诉他怎么做吧
  • 2019-07-18
    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-03
    在__exit__里面怎么把出现的异常捕获处理呢?

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

  • 2019-05-19
    杨硕同学的解释容易理解很多,非常赞。
  • 2019-02-10
    老师,前面装饰器的用法是不是可以实现 with 的效果,如果是的话,两者有什么区别呢

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

  • 2019-01-03
    老师我咨询下:
    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,看看从这个思路入手能不能帮你理解这个概念

  • 2018-10-31
    with open('file.txt','r') as f:
    r=f.read()
    老师请问一下这样改写过后,在哪里f.close()呀

    作者回复: 离开了with语句块文件就关闭了

  • 2018-10-31
    f=open('file.txt','r')
    try:
    r=f.read()
    except:
    pass
    finally:
    f.close()
    可以改写成
    with open('file.txt','r') as f:
    r=f.read()
    老师请问下如果这样改写过后在哪里f.close()呢
    用with只能打开这个文件创建f实际,并读取内容,但是在哪里关闭f呢,这个资源就一直会占用着吗?
    展开
  • 2018-09-14
    不明白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()