05. 函数和代码复用
1. 函数的定义与使用
函数是一段具有特定功能的、可重用的语句组
- 函数是一种功能的抽象,一般函数表达特定功能
- 两个作用:降低编程难度 和 代码复用
可变参数传递
函数定义时可以设计可变数量参数,既不确定参数总数量
1 | def <函数名>(<参数>, *b ) : |
参数传递的两种方式
函数调用时,参数可以按照位置或名称方式传递
函数调用时,参数可以按照位置或名称方式传递
当返回对个则是元组类型
1 | def fact(): |
局部变量和全局变量
- 基本数据类型,无论是否重名,局部变量与全局变量不同
- 可以通过global保留字在函数内部声明全局变量
- 组合数据类型,如果局部变量未真实创建,则是全局变量
因为 Python 是隐式定义变量, 没有指定初始数据类型, 在方法内定义就成了局部变量, 只有通过 global 区分了
lambda 函数
lambda函数返回函数名作为结果
1 | <函数名> = lambda <参数>: <表达式> |
谨慎使用lambda函数
- lambda 函数主要用作一些特定函数或方法的参数
- lambda 函数有一些固定使用方式,建议逐步掌握
- 一般情况,建议使用def定义的普通函数
2. 实例: 七段数码管回执
3. 代码复用与函数递归
把代码当成资源进行抽象
- 代码资源化:程序代码是一种用来表达计算的"资源"
- 代码抽象化:使用函数等方法对代码赋予更高级别的定义
- 代码复用:同一份代码在需要时可以被重复使用
代码复用
函数 和 对象 是代码复用的两种主要形式
函数:将代码命名在代码层面建立了初步抽象
对象:属性和方法 <a>.<b>
和 <a>.<b>()
在函数之上再次组织进行抽象
模块化设计
分而治之
- 通过函数或对象封装将程序划分为模块及模块间的表达
- 具体包括:主程序、子程序和子程序间关系
- 分而治之:一种分而治之、分层抽象、体系化的设计思想
模块化设计
紧耦合 松耦合
- 紧耦合:两个部分之间交流很多,无法独立存在
- 松耦合:两个部分之间交流较少,可以独立存在
- 模块内部紧耦合、模块之间松耦合
递归的定义(基例 和 链条)
汉罗塔问题
1 | def haoi(n, src, dst, mid): |
4. PyInstaller库的使用
- 官方网站:http://www.pyinstaller.org
- 第三方库:使用前需要额外安装
- 安装第三方库需要使用pip工具
将.py源代码转换成无需源代码的可执行文件
- 在安装pip前,请确认你win系统中已经安装好了python,和easy_install工具,如果系统安装成功,easy_install在目录C:\Python27\Scripts 下面
- 进入命令行,然后把目录切换到python的安装目录下的Script文件夹下,运行 easy_inatall pip
- pip install pyinstaller
- (cmd命令行)
pyinstaller -F <文件名.py>
5. 科赫雪花小包裹
1 | import turtle |