图解Python视频教程(高级篇)

独家

下载课程

下载学院APP

缓存视频离线看

收藏(184)

图解Python视频教程(高级篇)

适用人群: 已经学习完《图解Python视频教程(基础篇)》的朋友;有一定的Python基础并想进一步提高的朋友

共95课时 共18小时4分钟 更新时间:2018-09-06

价  格

¥198

优惠活动

会员95折,立省10元

2424小时内答疑

课时永久观看

退15分钟内无条件退款

  1. 仅限付费视频课程适用
  2. 购买后15分钟内可以找到客服进行沟通退款
  3. 退款将返还至51CTO学院账户,不支持提现
  4. 下载资料后不再享有退款特权
  5. 客服(Tel:400-101-1651)
  6. 最终解释权归51CTO学院所有

APP缓存听课

PC倍速播放

专属资料下载

课程介绍

课程大纲

学习资料

学员评价

课程目标
通过学习本套视频课程,希望能够帮助各位朋友掌握Python编程语言的一些高级主题,进一步提高Python技能和水平!
适用人群
已经学习完《图解Python视频教程(基础篇)》的朋友;有一定的Python基础并想进一步提高的朋友
课程简介
  • 说在前面的话

    本套视频课程是《图解Python(基础篇)》的后续课程,还没有学习基础篇的朋友可以在51CTO学院进行搜索。您正在观看的,可能是迄今为止最易懂的Python视频教程!

  • 浅拷贝

    所谓浅拷贝,指的是:对于某个对象,虽然创建了与该对象具有相同值的另一个对象,但是,这两个对象内部嵌套的对应子对象全都是同一个对象。简单地说,外部进行了拷贝,内部没有拷贝。以下方式得到的拷贝都是浅拷贝:1. 切片操作[:] 2. 调用列表、字典、集合的方法copy() 3. 调用...

  • 深拷贝

    所谓深拷贝,指的是:对于某个对象,创建与该对象具有相同值的另一个对象,同时,这两个对象内部嵌套的对应可变子对象全都不是同一个对象。简单地说,外部和内部都进行了拷贝。如果不可变对象内部又嵌套的可变子对象,深拷贝之后,会创建一个与该不可变对象具有相同值的另一个对象。

  • 面向对象编程的概述(上)

    面向对象编程(Object Oriented Programming,简称OOP),是一种编程方式,这种编程方式需要使用"对象"来实现。对象具有以下特征:1. 世间万物皆对象;2. 每个对象都是唯一的;对象具有属性和行为;对象具有状态;对象分为类对象和实例对象两大类。

  • 面向对象编程的概述(下)

    面向对象编程的大体步骤:1. 抽象出类对象;2. 抽象出类对象的属性;3. 抽象出类对象的行为(方法);4. 根据类对象创建实例对象; 5. 通过实例对象访问属性和方法。

  • 定义类对象和创建实例对象(上)

    根据类对象创建实例对象的语法格式为:类名([实参])。为了在创建实例对象后对其进行初始化(例如:给实例对象绑定一些属性),可以在类对象中定义一个名为__init__的特殊方法(以双下划线__开头和结尾的方法)。这样,创建实例对象后就会自动调用特殊方法__init__。如果没有定义特殊...

  • 定义类对象和创建实例对象(下)

    如果在类对象中定义了特殊方法__init__,那么对于"类名([实参])",会执行两大步:1. 创建实例对象;2. 自动调用创建的实例对象的特殊方法__init__(创建的实例对象会作为实参被自动传递给特殊方法__init__的第一个形参self)。

  • 实例属性(上)

    实例属性指的是实例对象所绑定的属性。绑定实例属性(给实例对象绑定属性)的方式有两种:1. 在类对象的内部(方法中);2. 在类对象的外部。访问实例属性的方式有两种:1. 在类对象的内部(方法中);2. 在类对象的外部。之所以添加前缀"self"或"实例对象",是为了表明实例属性...

  • 实例属性(下)

    同一个类对象的不同实例对象所绑定的实例属性是相互独立的。也就是说,给一个实例对象绑定的实例属性,对于另外一个实例对象是不起作用的。

  • 类属性(上)

    类属性指的是类对象所绑定的属性。绑定类属性(给类对象绑定属性)的方式有两种:1. 在类对象的内部(方法外);2. 在类对象的外部。访问类属性的方式有两种:1. 在类对象的内部(方法中);2. 在类对象的外部。之所以添加前缀"类对象",是为了表明类属性被哪个类对象所绑定。

  • 类属性(中)

    举例实践绑定类属性的两种方式和访问类属性的两种方式。

  • 类属性(下)

    访问实例属性和类属性都可以通过"实例对象.属性名"的方式。当通过"实例对象.属性名"的方式访问属性时,会先查找指定的实例对象中有没有指定名称的实例属性,如果没有,再查找对应的类对象中有没有指定名称的类属性。所以,当通过"实例对象.属性名"的方式访问属性时,如果实例属性和类...

  • 实例方法(上)

    实例方法指的是只有实例对象才可以调用的方法。在类对象中定义实例方法时,第一个形参表示调用该方法的实例对象,其对应的实参由系统自动传入。第一个形参的名称通常是self,也可以是其它名称。调用实例方法时,系统自动将调用该实例方法的实例对象作为实参传递给第一个形参。第一个...

  • 实例方法(下)

    Python是动态语言,所以,在实例对象或类对象创建之后,可以对其动态地绑定实例方法。同一个类对象的不同实例对象所绑定的实例方法是相互独立的。也就是说,给一个实例对象绑定的实例方法,对于另一个实例对象是不起作用的。为了能让一个类对象的所有实例对象都能调用某个实例方法,...

  • 类方法

    类方法指的是类对象中使用装饰器@classmethod进行装饰的方法。在类对象中定义类方法时,必须使用装饰器@classmethod进行装饰,此外,第一个形参表示类对象,其对应的实参由系统自动传入。第一个形参的名称通常是cls,也可以是其它名称。调用类方法时,系统自动将类对象作为实参传递给...

  • 静态方法

    类对象的静态方法只是一个普通函数。把某个普通函数归属于类对象,可能只是为了易于代码管理。在类对象中定义静态方法时,必须使用装饰器@staticmethod进行装饰。静态方法只是一个普通函数,因此,第一个形参没有特殊含义和要求。调用静态方法时的参数传递与调用普通函数是一样的。

  • 访问控制

    访问控制指的是:控制类对象的属性和方法在类对象的外部是否可以直接访问。如果在类对象的某个属性或方法前添加两个下划线__,那么在类对象的外部就不能直接访问该属性或方法了。之所以不能在类对象的外部直接访问以双下划线开头的属性或方法,是因为:Python解释器对外把属性或方法_...

  • 封装

    封装是面向对象编程的三大特征之一。封装有两方面的含义:1. 将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂度。2. 在类对象的内部通过访问控制把某些属性和方法隐藏起来...

  • 继承的概述

    当几个类对象中有共同的属性和方法时,就可以把这些属性和方法抽象并提取到一个基类中,每个类对象特有的属性和方法还是在本类对象中定义,这样,只需要让每个类对象都继承这个基类,就可以访问基类中的属性和方法了。继承基类的每个类对象被称为派生类。基类也被称为父类或超类,派...

  • 继承

    子类只有一个直接父类时称为单继承,子类有多个直接父类时称为多继承。子类会继承所有父类(包括所有直接父类和所有间接父类)的所有属性和方法。子类可以添加父类中没有的属性和方法。

  • 重写

    如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其进行重写从而提供自定义的实现,重写的方式为:在子类中定义与父类中同名的属性或方法(包括装饰器)。子类重写父类的属性后,通过子类或其实例对象只能访问子类中重写后的属性,而无法再访问父类中被重写的属性。子类...

  • 多态

    除了封装和继承,多态也是面向对象编程的三大特征之一。简单地说,多态就是"具有多种形态",它指的是: 即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态地决定调用哪个对象中的方法。如果子类中不存在指定...

  • MRO(上)

    MRO的全称是Method Resolution Order(方法解析顺序),它指的是对于一棵类继承树,当调用最底层类对象所对应实例对象的方法时,Python解释器在类继承树上搜索方法的顺序。对于一棵类继承树,可以调用最底层类对象的方法mro()或访问最底层类对象的特殊属性__mro__,获得这棵类继承树的MRO。

  • MRO(下)

    在子类重写后的方法中通过super()调用父类中被重写的方法时,在父类中搜索方法的顺序基于以该子类为最底层类对象的类继承树的MRO。如果想调用指定父类中被重写的方法,可以给super()传入两个实参:super(a_type, obj),其中,第一个实参a_type是个类对象,第二个实参obj是个实例对象...

  • 获取对象的信息之内置函数issubclass()

    内置函数issubclass()用于判断类对象与类对象之间的关系。内置函数isinstance()用于判断实例对象与类对象之间的关系。

  • 获取对象的信息之内置函数type()

    内置函数type()用于获得指定对象的类型。实例对象的类型是其对应的类对象。类对象的类型是type,也就是说,类对象是type的一个实例对象。

  • 获取对象的信息之内置函数dir()

    对于制定的类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表。类对象与实例对象的结果是有区别的,类对象的结果中不包括实例属性。

  • 特殊属性和特殊方法

    调用内置函数dir()后的返回值中,很多属性和方法都是以双下划线__开头和结尾的,这些属性和方法中的绝大多数都继承自类object。以双下划线__开头和结尾的属性被称为特殊属性,以双下划线__开头和结尾的方法被称为特殊方法。特殊属性和特殊方法都是系统预定义的,我们自定义的属性名和...

  • 获取对象的信息之特殊属性__dict__

    对于指定的类对象或实例对象,可以访问特殊属性__dict__获得该类对象或实例对象所绑定的所有属性和方法的字典。其中,字典中的键为属性名或方法名。

  • 获取对象的信息之反射

    所谓"反射",指的是以字符串的形式来操作(包括:增删改查)对象的属性和方法。只有在不知道对象信息的情况下,才会去获取对象的信息。因此,如果可以直接写:object.name,就不要写为getattr(object, 'name')。

  • 类对象的特殊方法之__len__()

    内置函数len()用于返回对象的长度。内置函数len()的实参在默认情况下不能是自定义类对象的实例对象。如果想让内置函数len()的实参可以是自定义类对象的实例对象,必须在自定义类对象中实现特殊方法__len__()。这样,调用内置函数len()时,在其内部会自动调用实参所对应类对象的特殊方...

  • 类对象的特殊方法之__iter__()和__next__()

    for-in语句在默认情况下不能用于自定义类对象的实例对象。如果想让for-in语句可以用于自定义类对象的实例对象,必须在自定义类对象中实现特殊方法__iter__()和__next__()。for-in语句首先会调用特殊方法__iter__()返回一个可迭代对象,然后不断调用可迭代对象的特殊方法__next__()返...

  • 类对象的特殊方法之__add__()和__radd__()

    标准算术运算符在默认情况下不能用于自定义类对象的实例对象。如果想让标准算术运算符可以用于自定义类对象的实例对象,必须在自定义类对象中实现标准算术运算符对应的特殊方法。之所以可以使用加法和乘法运算符操作列表,是因为列表所对应的类对象list中实现了+和*对应的特殊方法;...

  • 类对象的特殊方法之__str__()(上)

    类对象的特殊方法之__str__()和__repr__()用于自定义并返回实例对象的字符串表示形式。

  • 类对象的特殊方法之__str__()(下)

    通常情况下,类对象的特殊方法__str__()和__repr__()的实现代码是一样的,因此,当实现了其中一个后,可以把其方法名赋值给另一个的方法名。内置函数str()和repr()都返回对象的字符串表示,其区别在于:str()的返回值是给用户看的,更加用户友好;repr()的返回值是给程序开发者看的,是为调试服务的。

  • 类对象的特殊方法之__new__()

    当使用"类名([实参])"创建实例对象时,Python解释器的主要处理过程包括两大步:1. 调用特殊方法__new__()创建实例对象;2. 调用特殊方法__init__()对创建的实例对象进行初始化。

  • 对象的引用计数(上)

    通常情况下,开发人员无需关心内存的分配和释放。当创建一个对象时,系统会自动分配一块内存以存储该对象的信息。当该对象不再被使用时,系统会进行垃圾回收以自动释放掉其占用的内存。为了确保使用中的对象不会被销毁,Python使用引用计数来跟踪和计算内存中每个对象被引用的次数。...

  • 对象的引用计数(下)

    对象的引用计数减1的情形:1. 对象离开它的作用域,例如:对象所在的函数执行完毕;2. 对象的引用被显式销毁;3. 引用对象的变量被赋予新的对象;4. 从容器中删除对象,或对象所在的容器被销毁。

  • 类对象的特殊方法之__del__()

    系统会自动销毁不再需要的对象以释放内存。因此,当对象被销毁时通常不需要手动地执行清理工作。但是,当使用我们自己创建的资源时,可能需要执行一些额外的清理工作,例如,如果创建了一个自定义的类对象来打开一个文件并写入一些数据,可能需要在实例对象被销毁之前关闭该文件。为...

  • 类对象的特殊方法之__getattr__()

    当访问实例对象的属性或方法时,如果指定的属性或方法不存在,就会抛出AttributeError。当访问实例对象的属性或方法时,为了避免指定的属性或方法不存在时抛出AttributeError,可以在实例对象对应的类对象中实现特殊方法__getattr__()。这样,当指定的属性或方法不存在时,会自动调用...

  • 类对象的特殊方法之__getitem__()

    对于自定义类对象的实例对象,在默认情况下,是不能像列表和字典那样使用中括号语法来操作数据的。如果想让自定义类对象的实例对象可以像列表和字典那样,使用中括号语法来操作数据,必须在自定义类对象中实现以下特殊方法:1. __getitem__(self, key) 当执行操作obj[key]...

  • 类对象的特殊方法之__call__()

    如果在类对象中实现了特殊方法__call__(),那么就可以像调用函数一样直接调用这个类对象的实例对象,从而会自动调用特殊方法__call__()。内置函数callable用于判断指定对象是否是可调用的。除了函数对象是可调用的之外,对于实现了特殊方法__call__()的类对象,其实例对象也是可调用的。

  • 类对象的特殊属性之__doc__

    调用内置函数dir得到的类对象的所有属性中,有一个特殊属性叫__doc__,用于表示类对象的文档字符串。与函数的文档字符串类似,位于类对象的第一行的字符串被称为类对象的文档字符串,通常用三个引号表示。类对象的文档字符串是对类对象的功能的简要描述。在PyCharm,类对象的文档字符...

  • 类对象的特殊属性之__slots__

    如果想要对实例对象动态绑定的属性和方法的名称进行限制,可以在其对应的类对象中定义特殊属性__slots__,并给__slots__赋值一个所有元素都为字符串的列表或元组,这样,对实例对象动态绑定的属性和方法的名称就只能来自于__slots__中的元素。默认情况下,访问实例对象的属性是通过访...

  • 模块的概述

    模块就是Python中的一个.py文件。可以在模块中定义变量、函数和类,定义在模块中的变量、函数和类统称为模块的属性。为了更好地组织和管理模块,Python引入了包。在某个目录下添加模块__init__.py之后,该目录就变成了包。因此,包是包含特定模块的特殊目录。

  • 使用标准库中的模块(上)

    Python官方给我们提供了一个标准库,其中有非常多的模块可供我们使用,用以完成各种不同的任务。如果想要使用标准库中的模块,必须使用import语句进行导入。有两种导入方式:(1)导入整个模块(2)导入模块中的属性。导入整个模块的语法格式为:import [包名.]模块名。如果被导入...

  • 使用标准库中的模块(下)

    导入模块中某个属性的语法格式为:from [包名.]模块名 import 属性名。导入模块中的属性之后,就可以直接访问模块中的属性了,而无需添加前缀"[包名.]模块名",从而使得代码更加简洁,但是与添加前缀相比,代码的可读性差了一些。导入模块中多个属性的语法格式为:from [包名.]模...

  • 使用第三方库中的模块(上)

    除了官方提供的标准库之外,还有非常非常多的第三方库可供我们使用,用以完成各种不同的任务。如果想要使用第三方库中的模块,必须先使用工具(例如:pip3)下载安装第三方库,然后通过import语句进行导入。PyPI的全程是:Python Package Index,它是Python官方的、基于Web的、集中...

  • 使用第三方库中的模块(中)

    搜索要下载安装的第三方库的package name,假设为xxx,则对应的安装命令为:pip3 install xxx 或:python3 -m pip install xxx。第三方库中模块的源代码也是极好的Python学习资料。导入第三方库中的模块的方式与导入标准库中模块的方式是完全相同的。

  • 使用第三方库中的模块(下)

    1. 创建配置文件setup.py 2. 创建其它文件 3. 打包自己开发的库 4. 将打包的库发布到PyPI或共享给别人

  • 安装和配置Anaconda

    我们经常会用到很多Python的第三方库。如果使用工具pip3逐个安装,不仅费时费力,而且还要考虑兼容性。Anaconda是一个基于Python的数据处理和科学计算平台,它内置了很多非常有用的第三方库。安装Anaconda后,相当于把大量的第三方库都自动安装好了,因此可以直接导入这些第三方库中的模块。

  • 使用当前项目中的模块

    如果想要使用当前项目中的模块,必须通过import语句进行导入。有三种导入方式:(1)直接导入(2)绝对导入(3)相对导入

  • 导入的不同模块中存在相同的属性

    当导入的不同模块中存在相同的属性时,比如:当导入的两个模块moda和modb中存在同名的变量v时,两种正确的导入方式:1. 给导入的属性起一个别名;2. 导入整个模块

  • import语句的执行流程

    当使用import语句导入模块时,解释器会根据sys模块的modules属性值来查找模块是否已经被导入了。如果模块已经被导入了,解释器什么都不做。如果模块没有被导入,(1)解释器按照某种路径搜索模块;(2)(可选)将搜索到的模块编译为pyc字节码文件;(3)执行编译生成的字节码文件从而运行模块。

  • 解释器搜索模块的路径

    解释器搜索模块的路径存放在模块sys的变量path中。 搜索路径主要由三部分组成:1. 当前目录;2. 标准库的目录;3. 第三方库的安装目录。

  • 搜索到的模块被编译为pyc字节码文件

    当使用import语句导入模块时,如果模块还没有被导入,首先,解释器会按照某种路径搜索模块;其次,搜索到的模块可能会被编译为pyc字节码文件。 当搜索到的模块第一次被导入时,它会被编译为pyc字节码文件。pyc字节码文件存放在与该模块同目录下的目录__pycache__中,其命名格式为...

  • 运行被导入的模块

    当使用import语句导入模块时,如果模块还没有被导入,首先,解释器会按照某种路径搜索模块;其次,搜索到的模块可能会被编译为pyc字节码文件;最后,执行编译生成的字节码文件从而运行模块。导入包中的模块时,会先导入包中的__init__.py,因此,在运行被导入的模块之前,会从最顶层...

  • 重新加载已经被导入的模块

    使用import语句导入某个模块后,如果对该模块做了修改,然后再次使用import语句导入该模块,那么对模块的修改不会起任何作用。使用import语句导入某个模块后,如果对该模块做了修改,可以调用标准库函数reload重新加载已经被导入的模块。

  • 调用内置函数dir查看模块的所有属性

    当调用内置函数dir时如果模块作为参数,会返回指定模块的所有属性。其中,以双下划线__开始和结尾的属性是模块的特殊属性。当调用内置函数dir时如果不带任何参数,会返回当前模块的局部作用域中的所有属性。

  • 模块的特殊属性之__doc__

    调用内置函数dir得到的模块的所有属性中,有一个特殊属性叫__doc__,用于表示模块的文档字符串。与函数的文档字符串类似,位于模块的第一行的字符串被称为模块的文档字符串,通常用三个引号表示。模块的文档字符串是对模块功能的简要描述。在PyCharm,模块的文档字符串用灰色显示。之...

  • 模块的特殊属性之__name__

    调用内置函数dir得到的模块所有属性中,有一个特殊属性叫__name__。对于被导入的模块,其特殊属性__name__的值为模块名。对于直接运行的模块,其特殊属性__name__的值为__main__。对于模块中的测试代码,通常当直接运行模块时才需要执行,而当模块被导入时则不需要执行。因此,可以根...

  • 模块内的数据访问控制之单下划线

    为了在某种程度上实现模块内的数据访问控制,可以在模块内的某些属性前添加单下划线_。这样,就无法使用语句"from 模块名 import *"导入相应的属性了,但是,使用语句"import 模块名"仍然可以导入相应的属性。

  • 模块内的数据访问控制之特殊属性__all__

    为了在某种程度上实现模块内的数据访问控制,还可以在模块内定义特殊属性__all__。这样,使用语句"from 模块名 import *"只能导入特殊属性__all__中定义的属性,但是,使用语句"import 模块名"仍然可以导入所有的属性。当使用语句"from 模块名 import *"导入属性时,如果既在...

  • 生成器(上)

    为什么前面的课程中没有讲解元组生成式?因为根本就不存在元组生成式!元组是不可变类型的对象,无法在代码中动态地创建元组对象。生成器中保存的并不是其对应的所有元素,而是如何推算出所有元素的算法。将生成器用于for-in语句时,元素是在循环的过程中不断被推算出来的。将生成器...

  • 生成器(下)

    当推算的算法比较复杂时,还可以使用生成器函数得到生成器。生成器函数中通过关键字yield返回推算出的元素。生成器函数与普通函数的区别在于:当调用内置函数next()或使用for-in语句进行迭代时,执行完yield语句就会将生成器函数挂起,下次会从挂起的地方继续执行。

  • 迭代器(上)

    可以用于for-in语句的对象被称为可迭代(Iterable)对象。例如:range、列表、元组、字符串、字典、集合、生成器,都是可迭代对象。可以调用内置函数isinstance()判断一个对象是否是可迭代对象。标准库模块collections中的类Iterable用于表示可迭代对象。可以调用内置函数iter()把不...

  • 迭代器(下)

    如果一个对象同时实现了特殊方法__iter__()和__next__(),那么该对象也被称为迭代器对象。如果将该对象用于for-in语句,for-in语句首先会调用特殊方法__iter__()返回一个可迭代对象,然后不断调用该可迭代对象的特殊方法__next__()返回下一次迭代的值,直到遇到StopIteration时退出循环。

  • 异常的概述

    异常指的是程序在没有语法错误的前提下,在运行期间产生的特定错误。每个特定错误都对应一个异常类对象。当产生某个特定错误时,其对应的异常类对象的实例对象就会被抛出。如果在程序中对抛出的异常实例对象不进行捕获和处理,程序就会停止运行,并且打印错误的详细信息,包括:1. T...

  • 使用try-except语句捕获和处理异常(上)

    程序在运行期间产生异常时,为了让程序能够继续执行,可以对抛出的异常实例对象进行捕获和处理,这是通过try-except语句实现的:把可能会产生异常的代码放在try语句块中以捕获异常实例对象,把处理异常的代码放在由若干个except子句组成的except语句块中。

  • 使用try-except语句捕获和处理异常(下)

    如果抛出的异常实例对象所对应的类对象是except子句中异常类对象的子类,那么该except子句也会被匹配。当try语句块中产生异常时,会从上到下依次查找是否有匹配的except子句,只要找到一个匹配的except子句,则不会再查找剩余的except子句。因此,要注意各个except子句的顺序。当多个...

  • 在try-except语句的后面添加else从句

    可以在try-except语句的后面添加else从句,这样,如果try语句块中的代码没有产生异常,就会执行else从句。

  • 在try-except语句的后面添加finally从句

    可以在try-except语句的后面添加finally从句,这样,finally从句中的代码总会被执行。因为finally从句总会被执行,所以通常在finally从句中释放资源,例如:关闭文件、关闭网络连接等。可以在try-except语句的后面同时添加else从句和finally从句。

  • 使用raise语句手动抛出异常

    可以使用raise语句手动抛出异常实例对象。如果在except语句块中不想对异常实例对象进行处理,可以使用关键字raise将其原样抛出 如果在except语句块中不想对异常实例对象进行处理,还可以使用raise语句手动抛出另外一个异常类对象的实例对象。

  • 自定义异常

    尽管Python内置的异常类对象可以满足我们绝大部分的需求,但是有时候我们可能想要创建自定义的异常类对象。正如所有内置异常类对象的基类是Exception,自定义异常类对象只需要继承Exception或其子类。

  • 异常和函数

    当函数内发生异常时,异常实例对象会被抛给该函数的调用者,如果该函数的调用者没有捕获和处理,则继续抛给上一层的调用者,这样一直向上抛,最后会被Python解释器捕获。在异常实例对象被向上抛的过程中,可以选择在合适的层对异常实例对象进行捕获和处理,而不需要在每一层进行捕获...

  • 获取异常信息

    在捕获异常实例对象后,可以调用标准库模块sys中的函数exc_info以获取异常的相关信息。该函数的返回值是一个包含三个元素的元组,这三个元素分别表示:异常的类型、异常的错误信息和包含异常调用堆栈的跟踪信息的Traceback对象。为了进一步提取Traceback对象中包含的信息,可以调用标...

  • with语句

    如果一个类对象实现了特殊方法__enter__()和__exit__(),那么就称这个类对象遵守了上下文管理协议,同时,这个类对象的实例对象被称为上下文管理器。with语句会让上下文管理器创建一个运行时上下文,当进入运行时上下文时自动调用特殊方法__enter__(),当离开运行时上下文时自动调用...

  • 打开文件

    把数据存储到文件中是数据存储的方式之一。如何将数据写入文件,并将写入到文件中的数据读取出来呢?读写文件之前,必须先打开文件。内置函数open()用于打开文件,第一个参数是文件的路径,必须要指定。既可以指定绝对路径,也可以指定相对路径。第二个参数是文件的打开方式,默认值...

  • 读文件(上)

    读文件之前,必须先打开文件。可以调用内置函数open()并以只读方式或读写方式打开文件。返回的文件对象有三个用于读文件的方法:1. read([size]) 如果不传参数,读到文件尾。如果传入参数,size用于指定字节数,当指定的字节数小于读到文件尾的字节数时,读取指定的字节数;当...

  • 读文件(下)

    如果文件较大,调用readlines()一次性读取整个文件会导致内存占用较大,因此,最好多次调用readlines(size)。指定的size不要超过默认缓冲区的大小。

  • 写文件

    写文件之前,必须先打开文件。可以调用内置函数open()并以只写方式、追加方式或读写方式打开文件。这样,返回的文件对象有两个用于写文件的方法。

  • 关闭文件

    文件在使用完毕后必须要关闭,这是因为文件对象会占用操作系统的资源,并且操作系统在某一时刻所能打开的文件数量也是有限的。读文件或写文件时都有可能发生异常,从而导致方法close()不会被调用。为了保证方法close()总能被调用,可以把读文件或写文件的操作放在try语句块中,把方法...

  • 文件指针

    任何文件对象都有一个文件指针,指向文件中的某个位置。读写文件时,是从文件指针的当前位置开始读写的,在读写的过程中,文件指针会随之往后移动。以追加方式打开文件后,文件指针指向文件的结尾位置;以其它方式打开文件后,文件指针指向文件的起始位置。可以调用文件对象的方法tel...

  • 函数的一些重要特性

    在Python中,一切皆为对象。所以,函数也是对象,从而函数可以被赋值给变量。一个函数可以作为另一个函数的实参。一个函数可以作为另一个函数的返回值。一个函数可以嵌套定义在另一个函数中。

  • lambda表达式

    lambda表达式就是匿名简化版的函数。在Python中,一切皆为对象。所以,lambda表达式也是对象,从而lambda表达式可以被赋值给变量。因为lambda表达式是匿名简化版的函数,所以,lambda表达式可以作为函数的实参。因为lambda表达式是匿名简化版的函数,所以,lambda表达式可以作为函数的返回值。

  • 偏函数(上)

    定义函数时,可以给形参设置默认值,从而简化函数的调用,只有与默认值不符的形参才需要传递额外的实参。偏函数也可以简化函数的调用。

  • 偏函数(下)

    可以将某个已有的函数转换为一个新函数,在转换的过程中指定最前面的若干个位置实参以及关键字实参,这样,当调用新函数的时候,在其内部调用的仍然是转换前的函数,在传递实参时只需要传递剩余的位置实参和关键字实参就可以了。转换后的新函数被称为转换前的函数的偏函数。借助于标...

  • 闭包(上)

    如果在一个函数的内部嵌套定义了另外一个函数(姑且将外部的函数和内部的函数分别称之为外函数和内函数),内函数中引用了外函数中的变量,并且外函数的返回值是内函数,这样,就构成了一个闭包。通常情况下,在函数调用结束后,函数内定义的变量将不再可用。但是,对于闭包而言,在...

  • 闭包(下)

    在默认情况下,在内函数中不能修改外函数中的变量引用的对象(如果引用的对象是可变类型的,可以修改对象的内容)。如果想在内函数中修改外函数中的变量所引用的对象,可以在内函数中使用关键字nonlocal对变量进行声明,从而表明在内函数中并没有重新定义一个新的同名变量,而是使用...

  • 变量的作用域(上)

    变量的作用域指的是变量起作用的范围。变量的作用域是由定义变量的位置决定的。

  • 变量的作用域(中)

    当在某个作用域中访问变量时,会按照LEGB的顺序依次搜索该作用域及其后面的所有作用域,只要找到了则停止搜索,如果没找到则抛出NameError。因此,如果不同的作用域中定义了同名的变量,根据LEGB的搜索顺序,前面作用域中的变量会屏蔽掉后面作用域中定义的同名变量。

  • 变量的作用域(下)

    在默认情况下,在局部作用域或嵌套作用域中不能修改全局变量所引用的对象(如果引用的对象是可变类型的,可以修改对象的内容)。如果想在局部作用域或嵌套作用域中修改全局变量所引用的对象,可以在局部作用域或嵌套作用域中使用关键字global对变量进行声明,从而表明在局部作用域或...

  • 内置函数locals()和globals()

    命名空间指的是某个作用域内所有名字和值的映射,用字典来表示。内置函数locals()可以返回其所在局部作用域的命名空间。内置函数globals()可以返回其所在全局作用域的命名空间。locals()并没有返回实际的命名空间,而是返回值的拷贝,所以,通过locals()修改某个名字对应的值,对于实...

  • 函数装饰器(上)

    对于某个函数,如果我们希望在不改变该函数代码的前提下,为该函数增加额外的功能,那么就可以使用装饰器来装饰该函数。装饰器是一个函数,装饰器接收一个函数作为参数(传入的实参是被装饰的函数),装饰器的内部嵌套定义另一个函数,内函数中会引用装饰器的参数,并且装饰器的返回...

  • 函数装饰器(下)

    如果希望被装饰函数的特殊属性__name__的值为其函数名,而不是装饰器的内函数的函数名,可以在装饰器的内函数前面添加另外一个装饰器:@functools.wraps(装饰器的参数名),其中functools.wraps指的是标准库模块functools中的函数wraps。把装饰器应用到被装饰函数时,还可以传递额外的...

加载中
所属章节 资料名称 文件大小 下载
相关资料推荐

暂时还没有学习资料~

综合评分

0人评价

好于0%的课程

暂无

课程与描述相符 5 非常满意

老师的讲解表达 5 非常满意

老师的答疑服务 5 非常满意

全部

好评 0

中评 0

差评 0

加载中
没有了哦~
你可能还感兴趣的课程

讲师介绍

张荣超

张荣超

好评率:100%

曾就职于联想、HTC、阿里巴巴,担任高级软件开发工程师、Team Leader、技术主管、高级技术培训讲师。丰富的Python、Swift、Kotlin开发及培训经验。

官方交流群

51CTO学院Python实战群(325935753)

立即加入

53047人学习过

推荐图书

7日学霸榜 有53047人与你一起学习

课程介绍

课程大纲

学习资料

学员评价

¥198

课程评价

发表客观评价,最高可得35学分(会员可得70学分)

图解Python视频教程(高级篇)

该课程已有 人评价

课程与描述相符

老师的讲解表达

老师的答疑服务

匿名

在线
客服
APP
下载

下载Android客户端

下载iphone 客户端

返回
顶部