1. 匿名函数
1.1 简介
1. 定义
- 匿名函数是简单普通函数的简洁写法
- 定义的函数没有名字,这样的函数叫做匿名函数
2. 语法结构
lambda [形参1], [形参2], ... : [单行表达式] 或 [函数调用]
1.2 应用
# 无参有返回值匿名函数
# a) 匿名函数整体就是函数名字, 函数名字()就是函数调用
ret = (lambda: 1 + 1)()
print(ret)
# b) 给匿名函数起一个函数名字,函数名字()就是调用函数
func = lambda: 1 + 1 # 给匿名函数起一个函数名字叫func
ret = func() # 返回值变量 = 函数名()
print(ret)
print('=' * 30)
# 有参有返回值匿名函数
# a. 直接调用匿名函数
ret = (lambda a, b: a - b)(30, 10)
print(ret)
# b. 先给匿名函数起名,再调用
func = lambda a, b: a - b
ret = func(30, 10)
print(ret)
1.3 注意
-
匿名函数中不能使用 while 循环、for 循环,只能编写单行的表达式,或函数调用
-
匿名函数中返回结果不需要使用 return,表达式的运行结果就是返回结果
-
匿名函数中也可以不返回结果。
lambda : print('hello world')
# 给匿名函数起一个函数名字,函数名字()就是调用函数
func = lambda: 1 + 1 # 给匿名函数起一个函数名字叫func
ret = func() # 返回值变量 = 函数名()
print(ret)
2. 递归函数
2.1 简介
1. 定义
- 如果 一个函数在内部调用其本身,这个函数就是 递归函数。
2. 特点
- 递归函数一般会在特定情况下不再调用函数本身(一定要有出口),否则会导致到达最大递归次数, 程序报错
2.2 应用
需求:通过递归函数实现阶乘
分析:
阶乘的规律:
1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!
实现:
# 1. 定义函数(参数)
def func(n):
# 2. 如果我是 1 ,直接返回 1
if n == 1:
return 1
# 3. 否则,返回 n * 函数调用自己(n-1)
else:
ret = n * func(n-1)
return ret
# 函数调用
_ret = func(3)
print(_ret)
2.3 调用流程
3. enumerate、del
3.1 简介
- 通过 for 配合 enumerate 遍历容器同时获取元素索引位置、元素
- 省略了索引+1操作
3.2 使用
for i, value in enumerate(容器):
3.2 应用
user_list = [{'name': 'mike', 'age': 34, 'tel': '110'},
{'name': 'yoyo', 'age': 18, 'tel': '120'}]
# 遍历列表,同时把索引位置能打印
# 普通方法实现
# 1. 定义索引位置变量
i = 0
# 2. for遍历列表,打印:索引、元素
for user_dict in user_list:
print(i, user_dict)
# 3. 索引位置+1
i += 1
print('=='*20)
# 通过enumerate方法实现
# enumerate(容器变量):获取到:元素位置,元素
for i, user_dict in enumerate(user_list):
print(i, user_dict)
运行结果:
0 {'name': 'mike', 'age': 34, 'tel': '110'}
1 {'name': 'yoyo', 'age': 18, 'tel': '120'}
========================================
0 {'name': 'mike', 'age': 34, 'tel': '110'}
1 {'name': 'yoyo', 'age': 18, 'tel': '120'}
3.3 通过del删除列表元素
1. 简介
- 通过del删除列表元素:
del 列表[索引]
3.4 应用
user_list = [{'name': 'mike', 'age': 34, 'tel': '110'},
{'name': 'yoyo', 'age': 18, 'tel': '120'}]
# 通过del删除列表元素 del 列表[索引位置]
print(user_list) # [{'name': 'mike', 'age': 34, 'tel': '110'}, {'name': 'yoyo', 'age': 18, 'tel': '120'}]
# 删除索引位置为0的元素
del user_list[0]
print(user_list) # [{'name': 'yoyo', 'age': 18, 'tel': '120'}]