函数和代码复用:
5.1 函数的定义与使用
5.2 实例7:七段数码管绘制
5.3 代码复用与函数递归
5.4 模块4:PyInstaller库的使用
5.5 实例8:科赫雪花小包裹
def <函数名>(参数A):
<语句块>
return 参数B
#函数定义 n的阶乘
def fac(n):
s = 1
for i in range(1,n+1):
s *= i
return s
#函数调用
fac(10)
#可选参数放在非可选参数之后
def fac(n,m = 1):
s = 1
for i in range(1,n+1):
s *= i
return s//m
def fac(n, *b):
s = 1
for i in range(1,n+1):
s *= i
for item in b:
s *= item
return s
(3)参数传递方式
可按照位置或名称方式进行传递
def fac(n,m = 1):
s = 1
for i in range(1,n+1):
s *= i
return s//m
#两者相同
fac(1,2)
fac(m = 2,n=1)
返回值可以有多个
例如:
def fac(n,m = 1):
s = 1
for i in range(1,n+1):
s *= i
return s//m,n,m
(1) 函数内的局部变量是函数内部的占用符,不影响函数外的变量
函数内想用到全局变量需要声明 global
(2) 局部变量为组合数据类型且未创建,等同于全局变量
说白了就是全局变量在函数外创建了,函数内只是处理了一下
import turtle
import 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 drawDate1(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(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
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))
main()
代码复用:模块内部尽量紧耦合,模块之间松耦合
函数递归:
两个关键特征-- 链条,基例
注意:打包用jupyter写的代码时,需要先将.ipynb文件转换成.py文件再打包。
import turtle
def koch(size, n): #直线长度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)
turtle.pencolor("purple")
koch(600, 3) # 长600,3阶
turtle.hideturtle()
main()