Python 函数和代码复用
函数的定义和使用
函数的定义
def <函数名>(<参数0或多个>):
<函数体>
return <返回值>
参数传递
可选参数传递
def <函数名>(<非可选参数>,<可选参数>):
<函数体>
return <返回值>
可选参数必须放在必选参数之后。
可变参数传递
def <函数名>(<参数>,*b):
<函数体>
return <返回值>
*b:可以给出任意数量的参数。
参数传递两种方式
举例:
def fact(n,m=1):
s = 1
for i in range(1,n+1):
s *= i
return s//m
位置传递:
>>>fact(10,5)
725760
名称传递:
>>>fact(m=5,n=10)
725760
局部变量与全局变量
1.局部变量和全局变量是不同变量。
2.可以通过global保留字在函数内部声明全局变量。
3.局部变量为组合数据类型且未创建,等同于全局变量。
lambda函数
<函数名> = lambda<参数>:<表达式>
>>>f = lambda x,y:x+y
>>>f(10,15)
25
一般情况下,建议使用def函数体。
实例:七段数码管绘制
import turtle,time
def drawgap():
turtle.penup()
turtle.fd(5)
def drawLine(draw):
drawgap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawgap()
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, 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()
运行结果:
函数递归
实例一:将字符串s反转后输出
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, 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(3, "A", "C", "B")
print(count)
科赫雪花实例
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
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
turtle.done()
main()
运行结果: