一、递归
# 衔尾蛇
# 递归特点
# 1,函数内部调用自己
# 2,必须要有出口
实例1:# 有规律循环
打印1-9
def func(start, stop):
print(start)
# 9
if start == stop: # 结尾 递归的出口
return # 结束函数运行,停止递归
func(start + 1, stop)
# 自己调用自己
func(1, 9)
1
2
3
4
5
6
7
8
9
加入步长
def func(start, stop, step=1):
print(start) # 9
if start == stop: # 结尾 递归的出口
return
func(start + step, stop, step) # 自己调用自己
func(1, 9, 2)
1
3
5
7
9
实例2:# 无规律循环
list_data = [1, [2, 3, [4, 5, 6, [7, 8, 9, [0]]]]]
def func(data):
if type(data) == list:
for i in data:
func(i)
else:
print(data)
func(list_data)
1
2
3
4
5
6
7
8
9
0
二、lambda表达式
1、lambda 匿名 #匿名函数 没有名字的函数
2、优点 节省内存空间 优化代码
3、当函数里面的代码只有一行 可以转换为匿名函数
def add(a, b): return a + b
(lambda a, b: a + b)(1, 2)
# print(add(1, 2))
add1 = (lambda a, b: a + b) # 定义名字,重复使用
print(add1(1, 2))
print(add1(2, 3))
# 实际中,只使用一次 不需要考虑函数的名字,只需要功能
# lambda 传入的参数:返回的数据
#实例 5!=5x4x3x2x1
def func(data):
if data == 1:
return 1 # 出口
return data * func(data - 1)
print(func(5))
# func(5) 5xfunc(4)
# func(4) 4xfunc(3)
# func(3) 3xfunc(2)
# func(2) 2xfunc(1)
# func(1) 1
三、高阶函数
1、函数调用另外一个函数
2、高阶函数自带了for循环,变成了一个生成器对象
3、map 映射(列表推导式可以代替)
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def int_to_str(data):
return str(data)
print(list(map(int_to_str, list1)))
print(list(map(lambda i: str(i), list1))) # 生成器对象 0秒钟
print(list(map(str, list1)))
4、reduce 减,对列表中的两个数据进行操作,不能对3个数进行操作
from functools import reduce # from 从什么地方 import 导入什么东西
list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(reduce(lambda a, b: a + b, list2)) # 45
list3 = [[1, 2], [3, 4], [4, 6]]
def aa(a, b):
# a[1] + b[1] if type(a) == list else a + b[1] #三元表达式
if type(a) == list:
return a[1] + b[1]
else:
return a + b[1]
print(reduce(aa, list3)) # 12
print(reduce(lambda a, b: a[1] + b[1] if type(a) == list else a + b[1], list3)) # lambda表达式
标签:return,day12,递归,高阶,list,func,print,data,lambda From: https://www.cnblogs.com/xiaoabai/p/17176255.html