美文网首页
5.函数和代码

5.函数和代码

作者: 颜斶 | 来源:发表于2018-07-06 01:29 被阅读11次

    函数是一段代码的表示.具有特定功能,可重用.

    两个作用:降低编程难度和代码复用.

    def <函数名>(参数<0个或多个>) #输入
    <函数体> #处理
    return <返回值> #输出

    可变参数传递

    def <函数名>(<参数>,*b): #b可变参数
    <函数体>
    return <返回值>

    函数调用时,可以按照位置或者名称方式传递.


    函数的返回值
    • 函数可以有0个或多个返回值
    • 可以有return也可以没有
    • return可以传递0个也可以传递任意多个返回值

    局部变量和全局变量

    • 局部变量和全局变量是完全不同的变量
    • 使用global保留字在函数内部声明使用全局变量
    • 局部变量为组合数据类型且未被创建,等同于全局变量

    如果一个函数在内部调用自身本身,这个函数就是递归函数.
    计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出:
    fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n
    所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。
    于是,fact(n)用递归的方式写出来就是:

    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)
    

    lambda函数返回函数名作为结果.是一种匿名函数.

    <函数名>= lambda <参数> :<表达式>

    一般情况,建议使用def定义普通函数.


    例:七段数码管绘制

    import turtle
    def drawline(draw):
        turtle.pendown() if draw else turtle.penup()
        turtle.fd(40)
        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, 8, 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):
        for i in date:
            drawdigit(eval(i))
    def main():
        turtle.setup(800, 350, 200, 200)
        turtle.penup()
        turtle.fd(-300)
        turtle.pensize(5)
        drawdate('20180705')
        turtle.hideturtle()
        turtle.done()
    main()
    
    

    模块内部紧耦合,藕块之间松耦合.

    函数递归的几个练习

    1.字符串反转

    def rvs(s):
        if rvs == "":
            return s
        else:
            return rvs(s[1:])+s[0]
    
    

    2.斐波那契数列

    def f(n):
        if n == 1 or n == 2:
            return 1
        else:
            return f(n - 1) + f(n - 2)
    
    

    3.汉诺塔问题

    count = 0
    def hanoi(n, src,dst, mid):  #n是圆盘数,src是起始,dst是目标,mid是过度
        global count
        if n== 1:
            print("{}:{}->{}".format(1, src, dst)) #当圆盘是1时,从起始柱子移到目标柱子
            count += 1
        else:
            hanoi(n - 1, src, mid, dst)  #剩余的圆盘从A移到B柱子
            print("{}:{}->{}".format(n, src, dst))  #最大的圆盘从A移到C柱子
            count += 1
            hanoi(n - 1, mid, dst, src) #剩余的圆盘从B柱子到C柱子
    
    

    相关文章

      网友评论

          本文标题:5.函数和代码

          本文链接:https://www.haomeiwen.com/subject/bqcmuftx.html