5. Python函数

来源:互联网 发布:v360监控软件下载 编辑:程序博客网 时间:2024/04/28 05:58

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 Turtlep=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()
结果如下:



4.2 使用turtle绘制如下图案


采用递归实现程序如下

from turtle import Turtledef 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()

结果如下


原创粉丝点击