函数的定义和使用
函数的理解与定义
1)理解
函数是一段具有特定功能的、可重用的语句组;是一种功能的抽象,表达特定功能
两个作用:降低编程难度 和 代码复用
2)定义
def <函数名>(<一个或多个参数>):
<函数体>
return <返回值>
函数的使用及调用过程
1)调用时要给出实际参数
2)实际参数替换定义中的参数
3)函数调用后得到返回值
函数的参数传递
1)n的阶乘: n!=1×2×3×...×n
2)函数可以有参数,也可以没有,但必须保留括号
3)可以为某些参数提供默认值,构成可选参数,可选参数放在必选参数后面
def fact(n, m=1)
4)函数定义时可以设计可变数量参数,既不确定参数总数量
def <函数名>(<参数>, *b)
<函数体>
return <返回值>
5)函数调用时,参数可以按照位置或名称方式传递
函数的返回值
1)return保留字用来返回传递返回值
2)函数可以有返回值,也可以没有,可以有return,也可以没有
3)return可以传递0个返回值,也可以传递多个返回值
4)用元组方式返回多个值
局部变量和全局变量
1)程序:全局变量,函数:局部变量
2)规则1:局部变量和全局变量是不同变量
局部变量是函数内部的占位符,与全部变量可能重名但不同
函数运算结束后,局部变量被释放
可以使用global保留字在函数内部使用全局变量
在函数中global s :声明此处s是全局变量s
3)规则2:局部变量为组合数据类型且未创建,等同于全局变量
如果一个组合数据类型,在函数中被真实创建了,那就是这个函数的局部变量
lambda函数
1)lambda函数是一种匿名函数,即没有名字的函数
2)使用lambda保留字定义,函数名是返回结果
3)lambda函数用于定义简单的,能够在一行内表示的函数
<函数名> = lambda <参数>: <表达式>
f = lambda x, y : x+y
4)lambda函数主要用作一些特定函数或方法的参数
实例七:七段数码管绘制
用python绘制带有七段数码管风格的时间
1)基本思路
a)绘制单个数字对应的数码管
七段数码管由7个基本线条组成
七段数码管可以有固定向右的顺序
b)获得一串数字,分别绘制对应的数码管
不同数字显示不同的线条
c)获得当前系统时间,绘制对应的数码管
使用time库获得时间
增加年月日标志
年月日颜色不同
举一反三
模块化思维:确定模块接口,封装功能
规则化思维:抽象过程为规则,计算机自动执行
化繁为简:将大功能变为小功能组合,分而治之
应用问题扩展
绘制带小数点的七段数码管
带刷新时间的倒计时效果
七段数码管
代码复用与函数递归
代码复用与模块化设计
1)把代码当成资源进行抽象
代码资源化:程序代码是一种用来表达计算的“资源”
代码抽象化:使用函数等方法对代码赋予更高级别的定义
代码复用:同一代码在需要时可以被重复使用
2)函数和对象 是代码复用的两种主要形式
函数:将代码命名在代码层面建立了初步抽象
对象:属性和方法,在函数之上,进一步进行抽象
3)分而治之
通过函数或对象封装将程序划分为模块及模块间的表达
具体包括:主程序、子程序和子程序之间的关系
4)模块设计的两个基本概念
紧耦合:两个部分的交流很多,无法独立存在
松耦合:两个部分的交流很少,可以独立存在
模块内部紧耦合,模块之间松耦合
函数递归的理解
1)调用函数自身的方式就是递归
2)两个关键
链条:计算过程中存在递归链条
基例:存在一个或多个不需再次递归的基例
3)递归的定义
类似数学归纳法
证明当n取第一个值n0时命题成立
假设当nk时命题成立,证明当n=nk+1时命题成立
函数递归的调用过程
递归的实现
函数+分支语句
递归本身是一个函数,需要函数定义方式描述
函数内部,采用分支语句对输入参数进行判断
基例和链条,分别编写对应代码
函数递归实例解析
1)字符串反转
s[::-1] #从最开始到最后采用-1的步长输出
用递归方法
2)斐波那契数列
F(n)
1 , n=1
1 , n=2
F(n-1) + F(n-2) , otherwise
3)汉诺塔问题
输出两个参数
给定数量的圆盘从最左侧搬到最右测需要多少步骤
该怎么搬运
进一步抽象,三个柱子A,BC
初始状态,所有盘子都在A,最终目的搬到C
模块4:PyInstaller库的使用
概述:将.py源代码转换成无需源代码的可执行文件
1)是一个第三方库
2)可以使用pip工具安装
(cmd命令行)pip install pyinstaller
3)简单使用
(cmd命令行)pyinstaller -F <文件名.py>
常用参数
-h:查看帮助
--clean:清理打包过程中的临时文件
-D,--onedir:默认值,生成dist文件夹
-F, --onefile:在dist文件夹只生成独立的打包文件
-i <图标文件名.icon> :指定打包程序使用的图标文件
实例8:科赫雪花小包裹
分形几何:是一种迭代的几何图形,广泛存在于自然界中。
科赫曲线,也叫雪花曲线
科赫雪花绘制
1)用Python绘制科赫曲线
去3/1长,绘制成60度凸起
不停重复上一步的过程,形成科赫曲线
2)绘制n阶科赫曲线线段
递归思想:函数+分支
递归链条:线段的组合
递归基例:初识线段
科赫雪花的绘制
打包科赫雪花小程序
pyinstaller
举一反三
修改分形几何的绘制阶数
修改科赫曲线的基本定义及旋转角度
修改绘制科赫雪花的基本框架图形
分型几何千千万万
康托尔集、谢尔宾斯基三角形、门格海绵
龙形曲线、空间填充曲线、科赫曲线