day 2019.5.22
函数和代码复用
代码复用与函数递归
代码复用与模块化设计
- 代码复用
把代码当成资源进行抽象
代码资源化:程序代码是一种用来表达计算的"资源"
代码抽象化:使用函数等方法对代码赋予更高级别的定义
代码复用:同一份代码在需要时可以被重复使用 - 模块化设计
分而治之:通过函数或对象封装程序划分为模块及模块间的表达 - 紧耦合 松耦合
紧耦合:两个部分之间交流很多,无法独立存在
松耦合:两个部分之间交流较少,可以独立存在
模块内部紧耦合,模块之间松耦合
函数递归的理解
函数递归的调用过程
def fact(n):
if n == 0:
return 1
else:
return n*fact(n-1)
函数递归实例解析
- 字符串反转
将字符串s反转后输出
>>> 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)
print(f(8))
>>> 21
- 汉诺塔问题
count = 0
def hanoi(n,src,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)
hanoi(10,"A","C","B")
print(count)
PyInstaller库
- PyInstaller是第三方库
科赫雪花小包裹
- 分形几何
- 科赫曲线
# 科赫曲线
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.pensiz(2)
koch(600, 3)
turtle.hideturtle()
main()
# 科赫雪花
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(-200, 100)
turtle.pendown()
turtle.pensiz(2)
level = 3 #3阶科赫雪花
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
turtle.hideturtle()
main()