学习第九天

浏览: 1200

偏函数

functoools模块中的功能。

当有参数在程序执行前已知,后续执行过程中会反复用到,为了少传参数,我们这时可以定义一个偏函数。

偏函数有三部分:

第一部分:参数,可以是你自己定义的,也可以是内置函数

第二部分:一个可变参数:*args,
第三部分:**kw,关键字参数。

举例:int()按默认十进制进行转换,当使用base参数时就可以实现N进制转换。

image.png

偏函数可以定义一个这样的函数,方便后续执行过程调用。

image.png

虽然函数中设置了默认值,但当有新的参数给base时,会按照新赋值的进行执行,把旧的给覆盖住。

解析:

  • 可变参数的传递image.png =   image.png
  • 关键字参数的传递image.png   =   image.png

模块

一个.py文件就是一个模块(Module)。举个例子:一个abc.py的文件就是一个名字叫abc的模块。

优点:大大提高了代码的可维护性,

          编写代码不用从0开始

避免函数名和变量冲突

为了避免模块名冲突,Python中又引入了按目录来组织模块的方法,这就是包(Package)

举例:假如abc和xyz的这两个模块名字与其他模块冲突了,于是我们通过包来组织模块,避免冲突,方法就是选择一个顶层包名。比如mycompany

按照如下目录存放:image.png引入了包之后,只要顶层包名不和别人冲突,那所有的模块都不会与别人冲突,现在abc.py模块就变成了mycompany.abc。

注意:每个包目录下都有一个image.png文件,这个文件是必须存在的,否则Python就把这个目录当成是普通目录,而不是一个包,image.png可以是空文件,也可以是含有Python代码,因为其本身就是一个模块,而他模块的名字就是mycompany。

其可以有很多目录,组成多层级的包结构。例如如下的目录结构:image.png其中,www.py的模块名就是mycompany.web.www。

创建模块时要注意

  1. 模块要遵循Python变量名规范,不要使用中文、特殊字符
  2. 模块名不要和系统模块名冲突,最好先查看系统是否存在该模块,检查方法是在python交互环境中执行import 自建模块名,若成功则说明系统存在此模块。

编写模块:

1   #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3
4 ' a test module '
5
6 __author__ = 'Michael Liao'
7
8 import sys

9 def test():
10 args = sys.argv
11 if len(args)==1:
12 print('Hello, world!')
13 elif len(args)==2:
14 print('Hello, %s!' % args[1])
15 else:
16 print('Too many arguments!')
17
18 if __name__=='__main__':
19 test()

说明

  • 第一行注释是可以让这个模块直接在Unix/Linux/Mac上直接运行,第二行注释表示.py本身使用标准UTF-8编码
  • 第四行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串被视为模块的文档注释。
  •  第6行的__author__变量把作者写进去,这样当你公开源代码后被人就可以看到你的大名。

以上就是Python模块的标准文件模板,当然这些也可以不写,但还是建议按照标准格式构建模块。

接下来是模块的主要内容。首先需要import模块使用到的标准库,然后是一系列函数实现模块的方法。

最后image.png当模块被直接使用时,name的属性就是main,这时就可以直接运行时写入一些调试语句。当模块被import调用时name属性就是模块名称,这时所以就会自动忽略那些调试语句。

作用域:

正常的函数和变量名是公开的,可以直接引用,

类似__xxx__这样的变量是特殊变量,可以被引用,但也有特殊用途。

类似_xxx和__xxx这样的函数或变量是非公开的(private),不应该被直接引用,不是不能,是不应该,从编程习惯上不应该引用private函数或变量。

private函数可以把外部不需要引用的函数进行封装,把内部逻辑进行隐藏。

安装第三方模块

通过包管理工具pip完成的。

注意:在Windows上安装前,要确保在安装Python时勾选了pip和Add python.exe to Path

        Mac和Linux上有可能并存python3.x和python2.x,因此对应的pip命令是pip3

安装常用模块:

推荐使用Anaconda,这时一个基于python的数据处理和科学计算平台,已经内置了许多非常有用的第三方库。

模块搜索路径

默认情况下,Python解释器会搜索当前的目录,所有已安装的内置模块和第三方模块,搜索路径放在sys模块中的path变量中

添加自己的搜索目录的两种方法:

直接修改sys.path,添加要搜索的目录

设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中,设置方式和设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径是不受影响的。


面向对象编程

object Oriented Programming ,简称OOP,是一种程序设计思想

面向过程和面向对象

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间的传递。在Python中所有数据类型都可视为对象,当然也可以自己定义对象。自定义的对象数据类型就是面向对象中的类(class)的概念。

对象的方法:调用对象对应的关联函数。

面向对象的设计思想是抽象出Class,根据Class来创建实例(instance)

面向对象的抽象程度要比函数高,因为一个class既包含数据,又包含操作数据的方法。

面向对象的三个特点:数据封装、继承、多态。


推荐 0
本文由 小白学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册