5.1函数的定义与使用
1.函数的理解与定义
def <函数名>(<参数(0个或多个)>) :
<函数体>
return <返回值>
2.函数使用及调用过程
3.函数的参数传递
函数可以有参数,也可以没有,但必须保留括号
函数定义时可以为某些参数指定默认值,构成可选参数
def <函数名>(<非可选参数>, <可选参数>) :
<函数体>
return <返回值>
函数定义时可以设计可变数量参数,既不确定参数总数量
def <函数名>(<参数>, *b ) :
<函数体>
return <返回值>
4.函数的返回值
函数可以返回0个或多个结果
return保留字用来传递返回值
函数可以有返回值,也可以没有,可以有return,也可以没有
return可以传递0个返回值,也可以传递任意多个返回值
5.局部变量和全部变量
规则1: 局部变量和全局变量是不同变量
- 局部变量是函数内部的占位符,与全局变量可能重名但不同
- 函数运算结束后,局部变量被释放
- 可以使用global保留字在函数内部使用全局变量
规则2: 局部变量为组合数据类型且未创建,等同于全局变量
5.2七段数码管绘制
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) #为绘制后续数字确定位置
5.3代码复用与函数递归
1.代码复用与模块化设计
紧耦合:两个部分之间交流很多,无法独立存在
松耦合:两个部分之间交流较少,可以独立存在
-
模块内部紧耦合、模块之间松耦合
2.函数递归的理解
链条:计算过程存在递归链条
基例:存在一个或多个不需要再次递归的基例
5.5科赫雪花小包裹
代码源:
#KochDrawV2.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(600,600)
turtle.penup()
turtle.goto(-200, 100)
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()