1. 函数定义:
使用def语句
格式: def <name>(<parameter>):
<body>
函数名<name>:任何有效的Python标识符
参数列表<parameter>:调用函数时传递给他的值
(1)参数个数大于等于零;
(2)多个参数用逗号分隔。
形式参数:定义函数时,函数名后面圆括号中的变量,简称“形参”。形参只有在函数内部有效;
实际参数:调用函数时,函数名后面圆括号中的变量,简称“实参”。
例:def add1(x):
x=x+1
return x
renturn语句:结束函数调用,并将结果返回给调用者。
2. 改变参数值的函数
def addin(balance,rate):
for i in range(len(balance)):
balance[i]=balance[i]*(1+rate)
def test():
amount=[1000,123,5411,456]
rate=0.08
addin(amount,rate)
print(amount)
test()
输出结果:[1080.0, 132.84, 5843.88, 492.48]
balance返回给amount = [1080.0, 132.84, 5843.88, 492.48];但是变量amount的值仍为[1000,123,5411,456]。只是返回到调用程序,该对象会呈现被修改的状态。
3. 函数与程序递归
递归:函数定义中使用函数自身的方法
3.1 经典例子:阶乘 n!=n(n-1)!
0!=1是递归的基例,递归程序执行到到基例标志结束。
阶乘的递归程序如下:
def fact(n):
if n==0:
return 1
else:
return n*fact(n-1)
3.2 字符串的反转
采用递归反转字符串:
def reverse(s):
return reverse(s[1:])+s[0]
>>> reverse("nihao")
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
reverse("nihao")
File "C:/Users/yanjun/Desktop/2222.py", line 2, in reverse
return reverse(s[1:])+s[0]
File "C:/Users/yanjun/Desktop/2222.py", line 2, in reverse
return reverse(s[1:])+s[0]
File "C:/Users/yanjun/Desktop/2222.py", line 2, in reverse
return reverse(s[1:])+s[0]
[Previous line repeated 990 more times]
RecursionError: maximum recursion depth exceeded
>>>
程序报错,超出最大递归调用深度,在python中,递归次数是有限的,一般为九百余次,前面函数没有递归基例,是一个无线递归,导致python奔溃。
正确代码:
def reverse(s):
if s=="":
return s
else:
return reverse(s[1:])+s[0]
4. 函数实例分析
4.1 使用turtle库绘制五角星
from turtle import Turtle
p=Turtle()
p.speed(1)#绘制速度
p.pensize(5)#绘制宽度
p.color("black",'yellow')#绘制线颜色和填充颜色
p.begin_fill()
for i in range(5):
p.forward(200)
p.right(144)
p.end_fill()
结果如下:
采用递归实现程序如下
from turtle import Turtle
def tree(plist,l,a,f):
#plist—存放一组turtle对象的列表
#l—树枝的长度
#a—画笔调整角度
#f—为上次枝杈长度与下层枝杈长度的比例
if l>5:
lst=[]
for p in plist:
p.forward(l)
q=p.clone()
p.left(a)
q.right(a)
lst.append(p)
lst.append(q)
tree(lst,l*f,a,f)
def maketree(x,y):
p=Turtle()
p.color("green")
p.pensize(2)
p.hideturtle()
p.getscreen().tracer(30,0)
p.left(90)#调整画笔,居中向上开始画
p.penup()
p.goto(x,y)
p.pendown()
t=tree([p],220,65,0.6375)
def main():
maketree(0,-200)
main()
结果如下