第5周 函数和代码复用

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YMWM_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值