本文主要介绍了在python的进阶学习过程中一些主要需要掌握的知识。所谓语言都是相通的,python中的很多思想,java语言中也同样支持。相比于java这种静态语言,python是一种动态语言,它的编码速度快,并且更容易适应不同的运行环境。动态语言和静态语言的区别之后再做讨论,这里先继续学习python的相关知识。
Python支持的函数式编程:
不是纯函数式编程:允许有变量
支持高阶函数:函数也可以作为变量传入
支持闭包:有了闭包就能返回函数
有限度地支持匿名函数
高阶函数:能接收函数做参数的函数
(1)变量可以指向函数;
(2)函数名其实就是指向函数的变量;
(3)函数的参数可以接收变量;
(4)一个函数可以接收另一个函数作为参数;
Python的装饰器:
问题:定义了一个函数后,想在运行的时候动态的增加功能,又不想改变函数本身的代码?
想到用高阶函数,可以接收函数作为参数,可以返回函数,能不能编写一个高阶函数是否可以接收一个函数,对其封装,然后返回一个新函数?
如何调用这个装饰器?
第一种:
第二种:
用这种方法f1的原始定义函数被彻底隐藏了。
Python内置的@语法就是为了简化装饰器调用:
装饰器的作用:
▷ 可以极大地简化代码,避免每个函数编写重复性代码。
▷ 打印日志:@log
▷ 检测性能:@performance
▷ 数据库事务:@transaction
▷ URL路由:@post(‘/register’)
Python中模块和包的概念:
将所有代码放入一个py文件:无法维护。
如果将代码分拆放入多个py文件中,好处:易于维护,同一个名字的变量互不影响。
如何在一个模块中引用其他模块呢?
解决模块名冲突的方法:把通明模块放入不同的包中。
引用一个完整的模块名:
如何区分包和普通目录呢?
在Python中,包下面必须有个__init__.py这个特殊文件。(每层都要有)
如何安装Python的第三方模块?
模块管理工具:1.easy_install 2.pip(内置)
命令:pip install 要安装的模块。
Python面向对象编程:
面向对象编程是一种程序设计的范式,它把程序看做是不同对象的调用。
面向对象是对现实世界建立的对象模型。
基本思想:类和实例
类用于定义抽象的类型,而实例是根据类的定义被创建出来。
最重要的思想就是数据封装
Python中类的继承:
继承:(1)新类不必从头编写;
(2)新类从现有的继承,就自动拥有了现有类的所有功能;
(3)新类只需编写现有类缺少的功能。
继承的好处:
(1)复用已有的代码;
(2)自动拥有现有类的所有功能;
(3)只需要编写缺少的新功能。
继承的过程图:
继承的特点:子类和父类是is关系;
Python的继承特点:
(1)总是从某一个类继承,如果没有合适的类,从object继承;
(2)不要忘记调用super().__init__方法,它是用来初始化父类的;
Python中的多态和多重继承:
多态:类具有继承关系,并且子类类型可以向上转型看作父类类型。例如:如果从person类派生出student和teacher,并且都有whoAmI()方法,在一个函数中,如果接受一个变量X,则无论该X变量是person、student还是teacher,都可以正确打印出结果。这种行为成为多态,也就是说,方法调用将作用在X的实际类型上。S是student类型,它实际上拥有自己的whoAmI ()方法以及从person继承的whoAmI ()方法,但调用s. whoAmI ()总是先查找它自身的定义,如果没有定义,则顺着继承向上查找,直到在某个父类中找到为止。
实现多态的例子:
多重继承:除了从一个父类继承外,python允许从多个父类继承。
多重继承的目的是从两种继承树中分别选择并继承子类,以便组合功能使用。
举个例子:Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有 多进程ForkingMixin 和 多线程ThreadingMixin两种。
要创建多进程模式TCPServer:
要创建多线程模式UDPServer:
如果没有多重继承,要实现上述所有可能需要8个子类。
多重继承的例子:
Python中的特殊方法:
比较print的结果:
如果对一个list进行print,会得到lst的内容,例如:
如果对一个实例进行print,会得到一个字符串,例如:
Python是如何把任意变量变成str?
答:因为任何问题的实例都有一个特殊方法:__str__()。
Python定义的特殊方法:
▷ 用于print的__str__方法
▷ 用于len的__len__方法
▷ 用于cmp的__cmp__方法
Python特殊方法的特点:
▷ 特殊方法定义在class中
▷ 不需要直接调用
▷ Python的某些函数或操作符会调用对应的特殊方法
正确实现特殊方法:
▷ 只需要编写用到的特殊方法
▷ 有关联性的特殊方法都必须实现
Python中的__call__:
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__。
下一步的学习内容:
Python中的IO编程:文件和socket
Python中实现多任务:进程和线程
Python中的数据库编程
Python中的web开发