一、匿名函数
匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。(省略了用def声明函数的标准步骤)
匿名函数的定义和调用
计算两个数的和
匿名函数的应用示例
匿名函数实例
问题描述: 有一个整数列表(10个元素), 要求调整元素顺序,把所有的奇数放在前面,偶数放在后面。
实现如下:
import random
li = []
for i in range(10):
li.append(random.randint(1,100))
print(sorted(li, key=lambda x: 1 if x % 2 == 0 else 0))
二、递归函数
已知: 函数可以调用函数。结论: 一个函数在内部调用自己本身,这个函数就是递归函数。
递归函数的经典实例
1、 计算阶乘 factorial: n! = 1 * 2 * 3 * … * n
具体实现代码
def recursive_factorial(num):
"""
使用递归求num的阶乘
"""
# 如果num等于0或者1, 返回1;
if num ==1 or num == 0:
return 1
# num的阶乘为num*(num-1)!
else:
return num * recursive_factorial(num - 1)
print("2的阶乘: ", recursive_factorial(2))
print("0的阶乘: ", recursive_factorial(0))
2、斐波那契数列(Fibonacci sequence)的实现,F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
具体实现和结果
def f(n):
if n <= 2:
return 1
else:
return f(n - 1) + f(n - 2)
print(f(4)) #输出菲波那契数列的第4个
print(f(6)) #输出菲波那契数列的第6个
3、汉诺塔问题
在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。
具体实现和结果如下:
moveCount = 0
def hanoi(n, a='A', b='B', c='C'):
"""
:param n:盘子个数
:param a:初始塔
:param b:缓存塔
:param c:目标塔
:return:移动次数
"""
if n == 1:
global moveCount
moveCount += 1
print(a, "--->", c)
else:
hanoi(n - 1, a, c, b)
hanoi(1, a, b, c)
hanoi(n - 1, b, a, c)
hanoi(3)
print("移动次数:", moveCount)