一. 函数的定义和使用
1. 函数的理解与定义
(1). 定义
函数是一段代码的表示
函数是一段具有特定功能的、可重用的语句组
函数是一种功能的抽象,一般函数表达特定功能
(2). 作用
降低编码难度
代码复用
(3). 基本语法
def 函数名(参数<0个或多个>):
函数体
return 返回值
2. 函数的使用及调用过程
(1). 函数的调用
调用是运行函数代码的方式
(2). 函数调用过程
3. 函数的参数传递
(1). 参数个数
函数可以有参数,也可以没有,但必须保留括号
基本语法:
def 函数名():
函数体
return 返回值
(2). 可选参数传递
函数定义时可以为某些参数指定默认值,构成可选参数
基本语法:
def 函数名(,):
函数体
return 返回值
注:必选参数必须要写在可选参数的前面
(3). 可变参数传递
函数定义时可以设计可变数量参数,即不确定参数总数
基本语法:
def 函数名(, *b):
函数体
return 返回值
(4). 参数传递的两种方式
函数调用时,参数可以按照位置或名称方式传递
方式一:位置传递
方式二:名称传递
4. 函数的返回值
函数可以返回0个或多个结果
5. 局部变量和全局变量
(1). 定义
(2). 使用规则
注:基本数据类型,无论是否重名,局部变量与全局变量不同
规则一:局部变量和全局变量是不同的变量
规则二:局部变量为组合数据类型且未创建,等同于全局变量
6. lambda函数
lambda函数返回函数名作为结果
7. 七段数码管的绘制
import turtle
def drawLine(draw):
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
turtle.right(90)
def drawDigit(digit):
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date):
for i in date:
drawDigit(eval(i))
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate('20201026')
turtle.hideturtle()
turtle.done()
main()
import turtle, time
def drawLine(draw):
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
turtle.right(90)
def drawDigit(digit):
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date):
turtle.pencolor("red")
for i in date:
if i == '-':
turtle.write('年', font=("Arial", 18, "normal"))
turtle.pencolor("green")
turtle.fd(40)
elif i == "=":
turtle.write('月', font=("Arial", 18, "normal"))
turtle.pencolor("blue")
turtle.fd(40)
elif i == '+':
turtle.write('日', font=("Arial", 18, "normal"))
else:
drawDigit(eval(i))
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
二. 代码复用与函数递归
1. 代码复用与模块化设计
(1). 把代码当成资源进行抽象
(2). 函数和对象是代码复用的两种主要形式
(3). 模块化设计
2. 函数递归的理解
(1). 递归定义:函数定义中调用函数自身的方式
(2). 两个关键特性
(3). 数学归纳法
3. 函数递归的调用过程
(1). 举例
(2). 递归的实现
(3). 递归的调用过程
4. 函数递归实例解析
(1). 字符串反转
(2). 斐波那契数列
(3). 汉罗塔
(4). 科赫雪花
分形几何
用Python绘制科赫曲线
科赫曲线绘制函数
科赫雪花代码
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(600,600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
# koch(600, 3) #3阶科赫曲线,阶数
level = 3# 代表雪花的阶数
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
turtle.done()
main()