函数 -- 特殊函数

匿名函数

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张图片
  • 使用递归函数计算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
函数 -- 特殊函数_第2张图片
  • 使用递归函数计算 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 -

你可能感兴趣的:(函数 -- 特殊函数)