美文网首页
函数 -- 特殊函数

函数 -- 特殊函数

作者: __深蓝__ | 来源:发表于2019-01-07 11:22 被阅读0次
    匿名函数

    python 使用 lambda 来创建匿名函数。
    所谓匿名,即不再使用 def 语句这样标准的形式定义一个函数。

    lambda [arg1 [,arg2,.....argn]]:expression
    
    • lambda 只是一个表达式,而不是一个代码块,所以比def简单很多
    • lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数
    • 虽然 lambda 函数看起来只能写一行,却不等同于 CC++ 的内联函数,后者的目的是调用小函数时不占用栈内存,从而增加运行效率
    sum = lambda arg1, arg2: arg1 + arg2
    
    print ("相加后的值为 : ", sum( 10, 20 ))
    print ("相加后的值为 : ", sum( 20, 20 ))
    
    
    相加后的值为 :  30
    相加后的值为 :  40
    
    函数的嵌套调用
    • 一个函数里面又调用了另外一个函数,这就是 函数的嵌套调用
    def test1():
        print("test 1")
    
    def test2():
        print("test 2")    
        test1()
    
    test2()
    
    test 2
    test 1
    
    递归函数

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是 递归函数

    def sum_numbers(num):
        print(num)
        if num== 1:   # 终止条件很重要,否则会出现死循环
            return
        else:
            sum_numbers(num- 1)
        
    sum_numbers(3)
    3
    2
    1
    
    • 使用递归函数计算1+2+3+...+n
    def sum_numbers(num):
        if num == 1:
            return 1
        else:
            return num + sum_numbers(num - 1)
    
    print(sum_numbers(3))
    6
    
    • 使用递归函数计算 n!
    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)
    
    fact(5)
    120
    
    • 递归函数的调用过程
    ===> fact(5)
    ===> 5 * fact(4)
    ===> 5 * (4 * fact(3))
    ===> 5 * (4 * (3 * fact(2)))
    ===> 5 * (4 * (3 * (2 * fact(1))))
    ===> 5 * (4 * (3 * (2 * 1)))
    ===> 5 * (4 * (3 * 2))
    ===> 5 * (4 * 6)
    ===> 5 * 24
    ===> 120
    
    • 练习:编写 move(n, a, b, c) 函数,来实现汉诺塔的移动
    • 参数 n 表示柱子A上盘子的数量
    • 参数 abc 表示柱子的名字
    def move(n, a, b, c):
        if n == 1:
            print(a, '-->', c)
    
    move(3, 'A', 'B', 'C')
    # 期待输出:
    # A --> C
    # A --> B
    # C --> B
    # A --> C
    # B --> A
    # B --> C
    # A --> C
    




    - end -

    相关文章

      网友评论

          本文标题:函数 -- 特殊函数

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