匿名函数
python 使用 lambda 来创建匿名函数。
所谓匿名,即不再使用 def 语句这样标准的形式定义一个函数。
lambda [arg1 [,arg2,.....argn]]:expression
lambda
只是一个表达式,而不是一个代码块,所以比def
简单很多lambda
函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数- 虽然
lambda
函数看起来只能写一行,却不等同于C
或C++
的内联函数,后者的目的是调用小函数时不占用栈内存,从而增加运行效率
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上盘子的数量- 参数
a
、b
、c
表示柱子的名字
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 -
网友评论