一.函数
1.函数的定义
def <函数名>(<参数(0个或多个)>):
<函数体>
return <返回值>
2.函数的参数传递
- 为某些参数提供默认值,构成可选参数。如:
# def <函数名>(<非必须参数>, <必须参数>):
def fact(n, m=1):
s = 1
for i in range(1, n+1):
s *= i
return s//m
fact(10)
fact(10, 5)
- 如果实参提供了值,就用实参的值;否则用可选参数的值
- python规定,可选参数要放在必须参数的后面
- 不确定参数总数时,可设计可变数量参数。如:
# def <函数名>(<参数>, *b);
def fact(n, *b):
s = 1
for i in range(1, n+1):
s *= i
for item in b:
s *= item
return s
fact(10, 3)
fact(10, 3, 5, 8)
- 函数调用时,参数可以按照位置或名称方式传递。如:
def fact(n, m=1):
s = 1
for i in range(1, n+1):
s *= i
return s//m
fact(10, 5)#位置传递
fact(m=5, n=10)#名称传递
3.函数的返回值
在python中,返回值的个数不限制。如:
def fact(n, m=1):
s = 1
for i in range(1, n+1):
s *= i
return s//m, n ,m
fact(10, 5)
4.全局变量
规则1:在python中,定义的全局变量不能在函数体中直接使用,而要加保留字:global。如:
n, s = 10, 100#分别赋值
def fact(n):
global s#如果不加global,会编译错误
for i in range(1, n+1):
s *= i
return s
print(fact(n),s)
规则2:局部变量为组合数据类型且未创建,等同于全局变量,也就是不需要加globla。如:
ls = ["F", "f"]
def func(a):
ls.append(a)#在列表中加一个元素a
return
func("C")
print(ls)
如果创建了,即:
ls = ["F", "f"]
def func(a):
ls = []
ls.append(a)
return
func("C")
print(ls)
5.lambda函数
lambda函数是一种匿名函数,即没有名字的函数,用于定义简单的、能够在一行内表示的函数,它返回函数名作为结果。如:
# <函数名> = lambda <参数>:<表达式>
f = lambda x, y : x + y
f(10 ,15)#输出25
个人感觉,与C语言中宏定义类似。
二.实例7:七段数码管绘制
基本思路:
- 绘制单个数字对应的数码管
- 获得一串数字,绘制对应的数码管
- 获得当前系统时间,绘制对应的数码管
给出代码:
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(d): #根据数字绘制七段数码管
drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if d 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(-350)
turtle.pensize(5)
# drawDate('2018-10=10+')
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
三.实例二:绘制科赫雪花
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()