Python进阶教程!这还学不会?那就找我!手把手带你!比教科书还详细!

gino Sans GB','Microsoft YaHei','WenQuanYi Micro Hei','Helvetica Neue',Arial,sans-serif;background-color:rgb(255,255,255);">

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数

    ottom:0px;padding:20px 30px;list-style:square outside;color:rgb(34,255);">
  • ottom:0px;">变量可以指向函数

  • ottom:0px;">函数名其实就是指向函数的变量

函数:能接收函数做参数的函数

    ottom:0px;padding:20px 30px;list-style:square outside;color:rgb(34,255);">
  • ottom:0px;">变量可以指向函数

  • ottom:0px;">函数的参数可以接受变量

  • ottom:0px;">一个函数可以接受另一个函数作为参数

  • ottom:0px;">能接收函数做参数的函数就是高阶函数

函数作为参数

函数的概念,编写一个简单的高阶函数

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数

函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

一个f函数,接收x和y,返回x和y的和:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数

函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

一个list [1,4,6,7,9,12,17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

删除 s 字符串中开头、结尾处的 rm 序列的字符。

默认删除空白符(包括' ',' ',' ',' '),如下:

自定义排序函数

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

y:

调用 sorted() 并传入 reversed_cmp 就可以实现倒序排序:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数

函数不但可以返回int、str、list、dict等数据类型,还可以返回函数

一个函数 f(),我们让它返回一个函数 g,可以这样写:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。

函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。举例如下:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

调用f1(),f2()和f3()结果应该是1,4,9,但实际结果全部都是 9(请自己动手验证)。

函数返回了3个函数时,这3个函数所引用的变量 i 的值已经变成了3。由于f1、f2、f3并没有被调用,所以,此时他们并未计算 i*i,当 f1 被调用时:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数

函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。

函数提供了有限支持。还是以map()函数为例,计算 f(x)=x2 时,除了定义一个f(x)的函数外,还可以直接传入匿名函数

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

    ottom:0px;padding:20px 30px;list-style-position:outside;color:rgb(34,255);">
  1. ottom:0px;">装饰器用来装饰函数

  2. ottom:0px;">返回一个函数对象

  3. ottom:0px;">被装饰函数标识符指向的函数对象

  4. ottom:0px;">语法糖 @deco

一个高阶函数,它接收一个函数作为参数,然后,返回一个函数

代码。

一个@log的定义:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数首先返回一个decorator函数,再让这个decorator函数接收my_func并返回新函数

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

调用会失败,因为在3层嵌套的decorator定义中,最内层的wrapper引用了最外层的参数prefix,所以,把一个闭包拆成普通的函数调用会比较困难。不支持闭包的编程语言要实现同样的功能就需要更多的代码

函数功能增加,但是,经过@decorator“改造”后的函数,和原函数相比,除了功能多一点外,有没有其它不同的地方?

函数名:

输出: f1

函数名:

输出: wrapper

函数函数名已经不是'f2',而是@log内部定义的'wrapper'。这对于那些依赖函数名的代码就会失效。decorator还改变了函数的doc等其它属性。如果要让调用者看不出一个函数经过了@decorator的“改造”,就需要把原函数的一些属性复制到新函数中:

函数的所有必要属性一个一个复制到新函数上,所以Python内置的functools可以用来自动化完成这个“复制”的任务:

functools

functools.wraps(f)

函数签名改成了(args,*kw),因此,无法获得原函数的原始参数信息。即便我们采用固定参数来装饰只有一个参数的函数

函数的参数名,因为新函数的参数名始终是 'x',原函数定义的参数名不一定叫 'x'。

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

functools.partial就是帮助我们创建一个函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

文件系统中:

    ottom:0px;padding:20px 30px;list-style:square outside;color:rgb(34,255);">
  • ottom:0px;">包就是文件

  • ottom:0px;">模块就是xxx.py

  • ottom:0px;">包也可以有多级

    ottom:0px;">区分包和普通目录:

    ottom:0px;">包下面有个init.py文件,每层都必须要有

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

错误:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

代码先尝试从cStringIO导入,如果失败了(比如cStringIO没有被安装),再尝试从StringIO导入。这样,如果cStringIO模块存在,则我们将获得更快的运行速度,如果cStringIO不存在,则顶多代码运行速度会变慢,但不会影响代码的正常执行。

错误,并在捕获到指定错误时执行 except 语句。

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

    ottom:0px;padding:20px 30px;list-style-position:outside;color:rgb(34,255);">
  1. ottom:0px;">面向对象编程是一种程序设计范式

  2. ottom:0px;">把程序看作不同对象的相互调用

  3. ottom:0px;">对现实世界建立对象模型

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

属性

属性。

属性?由于Python是动态语言,对每一个实例,都可以直接给他们的属性赋值,例如,给xiaoming这个实例加上name、gender和birth属性

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

属性

一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性。例如,Person类应该在创建的时候就拥有 name、gender 和 birth 属性,怎么办?

添加一个特殊的init()方法,当创建实例时,init()方法自动调用,我们就能在此为每个实例都统一加上以下属性

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

方法常常忘记了 self 参数:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

一个实例绑定很多属性,如果有些属性不希望被外部访问到怎么办?

属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。看例子:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

属性

一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。

属性可以直接在 class 中定义:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

属性只有一份,所以,当Person类的address改变时,所有实例访问到的类属性都改变了。

属性和实例实型名字冲突怎么办

修改类属性会导致所有实例访问到的类属性全部都受影响,但是,如果在实例变量上修改属性会发生什么问题呢?

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

属性address ,对p1来说,它有一个实例属性address(值是'China'),而它所属的类Person也有一个属性address,所以:

属性,返回'China'。

属性address,但是有类属性address,因此返回'Earth'。

属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。

属性删除后,访问 p1.address 就又返回类属性的值 'Earth'了:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

方法

一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用?

属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法

方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用方法的实例本身,其他参数和一个普通函数是完全一样的:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

方法也是属性

方法其实也是属性,它实际上是一个函数对象:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。

调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。

    ottom:0px;padding:20px 30px;list-style:square outside;color:rgb(34,255);">
  • ottom:0px;">新类不必从头编写

  • ottom:0px;">新类从现有的类继承,就自动拥有了现有类的所有功能

  • ottom:0px;">新类只需要编写现有类缺少的新功能

    ottom:0px;padding:20px 30px;list-style:square outside;color:rgb(34,255);">
  • ottom:0px;">复用已有代码

  • ottom:0px;">自动拥有了现有类的所有功能

  • ottom:0px;">只需要编写缺少的新功能

    ottom:0px;">不要忘记调用super()init方法

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

方法调用将作用在 x 的实际类型上。s 是Student类型,它实际上拥有自己的 whoAmI()方法以及从 Person继承的 whoAmI方法,但调用 s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。

函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可:

normal;color:rgb(34,34);background-color:rgb(255,255);">class Book(object):

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

一个父类继承外,Python允许从多个父类继承,称为多重继承。

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

功能。多重继承通过 super()调用init()方法时,A 虽然被继承了两次,但init()只调用一次:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

功能使用。

cpserver、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有 多进程ForkingMixin 和 多线程ThreadingMixin两种。

cpserver:

cpserver(Tcpserver,ForkingMixin)

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数获取变量的类型,它返回一个 Type 对象:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

方法

    ottom:0px;padding:20px 30px;list-style:square outside;color:rgb(34,255);">
  • ottom:0px;">特殊方法定义在calss中

  • ottom:0px;">不需要直接调用

  • ottom:0px;">Python的某些函数或操作符会调用对应的特殊方法

一个类的实例变成 str,就需要实现特殊方法str()

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 cmp():

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

方法,cmp用实例自身self和传入的实例 s 进行比较,如果 self 应该排在前面,就返回 -1,如果 s 应该排在前面,就返回1,如果两者相当,返回 0。

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数

函数工作正常,类必须提供一个特殊方法len(),它返回元素的个数。

一个 Students 类,把名字传进去:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

一个Rational类来表示:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

函数正常工作,只需要实现特殊方法float()。

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

score(1000) 就会报错。

方法来封装对一个属性的访问在许多面向对象编程的语言中都很常见。

score() 和 s.set_score() 没有直接写 s.score 来得直接。

方法?----有。

支持高阶函数,在函数式编程中我们介绍了装饰器函数,可以用装饰器函数把 get/set 方法“装饰”成属性调用

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

一个score(self)是get方法,用@property装饰,第二个score(self,score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品。

属性一样设置score了:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

添加属性

添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的slots来实现。

一个类允许的属性列表:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

属性,如果不需要添加任意动态的属性,使用slots也能节省内存。

函数其实是一个对象:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

调用:

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细

Python进阶教程!学会这些你就算是Python小牛了!比教科书还详细


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实