1.匿名函数
# lambda表达式 # 匿名函数 # 没有名字的函数 相当于 # 优点:节省内存空间 优化代码 # def add(a, b): # return a+b def add(a, b): return a + b # 当函数里面的代码只有一行的时候可以这样写! print(add(1, 2)) # 但函数里面的代码只有一行,可以转换为匿名函数.. # lambda 传入的参数: 返回的数据 # (lambda a, b: a+b) (lambda a, b: a + b)(1, 2) # 只使用一次 调用匿名函数,在后面加括号和参数 add1 = (lambda a, b: a + b) # 定义名字,可重复使用 print(add1(1, 2)) print(add1(2, 6)) # 实践中一般只使用一次,不需要考虑函数的名字,只需要完成功能
2.递归
# 递归特点: # 1.函数内部自己调用自己 # 2.必须要有出口 # 有规律的循环(线性循环) # 打印 1 ~ 9 def func(start, stop, step=1): # 默认参数 print(start) if start == stop: # 结束 递归的出口 return # 作用只是结束函数运行,停止递归 默认是None 空 func(start + step, stop, step) func(1, 9) # range(1, 10, 1)
# 无规律循环(非线性循环) list_data = [1, [2, 3, [4, 5, 6, [7, 8, 9, [0]]]]] # 按照顺序打印1,2,3,4,5,6,7,8,9,0 # 如何判断i是否属于某个类型 # isinstance(要判断的变量, 要判断的类型) # print(isinstance([1, 2], list)) # [1, 2]是list类型,返回True # print(isinstance([1, 2], str)) # [1, 2]不是str类型,返回False # for i in list_data: # if type(i) == list: # 也可以这样 # for j in i: # ... # 一直嵌套 # else: # print(i) def func(data): # if type(data) == list: if isinstance(data, list): for i in data: # 是列表,则更深一层 func(i) else: print(data) # 不是列表,打印 func(list_data)
3.高阶函数
# 高阶函数 函数里面调用另一个函数
# reduce 减 from functools import reduce # from 从什么地方 import 导入什么东西 list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(reduce(lambda a, b: a + b, list1)) # 1+2=3,3+3=6,6+4=10... list3 = [[1, 2], [3, 4], [5, 6]] # 2+4+6=12 def aa(a, b): if type(a) == list: return a[1] + b[1] else: return a + b[1] print(reduce(aa, list3)) # 12
# map 映射 # map自带for循环 # map(一个函数名, 一个数据) list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(map(lambda i: str(i), list1)) # 生成器对象 print(list(map(lambda i: str(i), list1))) # 强转为list def int_to_list(data): return str(data) print(list(map(int_to_list, list1))) # 注意这里int_to_str只写了函数名,不是函数调用
今日作业
# 5! # 5的阶乘 def func(data): # print(data) if data == 1: # 出口 return 1 return data*func(data-1) print(func(5))
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的高阶函数 - Python技术站