5.1 函数的定义与使用
函数是一段代码的表示。
降低编程难度 代码复用
def f(n,m=1) 可选参数传递,必须放在 必选参数之后
def f(n,*b) 可变参数传递, 组合数据类型
按照位置给定参数 按照名称给定参数
fact(10,5) 按照位置
fact(m=5,n=10) 按照名称
函数返回值
函数可以返回0个或多个结果。
(10,2,3) 组合数据类型 元组
[10,2,3] 组合数据类型 列表
局部变量和全局变量
局部变量和全局变量是不同变量。
局部变量在函数结束时被销毁。
局部变量如果是组合数据类型(未在函数中被创建),那它就是全局变量。
global声明 → 全局变量
组合数据类型通过指针来实现。
lambda函数
lambda函数返回函数名作为结果。
一种非常简单的函数的紧凑形式。
f = lambda x, y : x + y 两个参数x,y 函数运行x+y
5.2 实例7:七段数码管绘制
import turtle
hideturtle()
turtle.write()
drawDate(time.strftime(’%Y-%m=%d+’, time.gmtime()))
5.3 代码复用与函数递归
对函数递归的理解
函数:将代码命名 初步抽象 函数是对代码的抽象
对象:属性和方法 进一步抽象
模块化设计
分而治之
紧耦合:交流很多,无法独立存在
松耦合:
链条:
基例:
类似数学归纳法
函数递归的调用过程:
递归的调用是计算机动态支持的。
递归是函数的计算机运算过程。
模板
自身代码的复制过程。
s[::-1]字符串反转
def rvs(s):
if s == "":
return s
else:
return rvs(s[1:]) + s[0]
斐波那契数列
def f(n):
if n == 1 or n == 2:
return 1
else:
return f(n-1) + f(n-2)
汉诺塔问题
count = 0
def hanoi(n, str, dst, mid):
global count
if n == 1:
print("{}:{}->{}".format(1,src,dst))
count += 1
else:
hanoi(n-1, src, mid, dst)
print("{}:{}->{}".format(n,src,dst))
count += 1
hanoi(n-1, mid, dst, src)
5.4 模块4:PyInstaller库的使用
源代码转换成可执行文件
.py → .exe
pip install pyinstaller
打包源代码
pyinstaller -F <文件名.py>
加图标curve.io
pyinstaller -i curve.io -F SevenDigitsDrawV2.py
5.5 实例8:科赫雪花小包裹
分形几何
科赫曲线 雪花曲线
#KochDrawV1.py
import turtle
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main():
turtle.setup(800,400)
turtle.penup()
turtle.goto(-300,-50)
turtle.pendown()
turtle.pensize(2)
level = 3 #3阶科赫雪花,阶数
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.hideturtle()
main()
pyinstaller -i curve.ico -F KochDrawV2.py