5. Python函数

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



4.2 使用turtle绘制如下图案


采用递归实现程序如下

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()

结果如下


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝色蛋黄包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值