函数递归,二分法,三元表达式,列表生成式和字典生成式,匿名函数
递归函数
什么是递归?
直接 或者 间接 的调用自己,叫做递归
递归函数的递归次数限制是1000次,但是可以修改和查看
并且递归一定要有结束条件
import sys print(sys.getrecursionlimit()) sys.setrecursionlimit(2000) print(sys.getrecursionlimit()) count = 1 def index(): print('from index') global count count += 1 print(count) index() index()
递归练习题
1 l = [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, ]]]]]]]]]] 2 3 4 def get_num(l): 5 for i in l: 6 if type(i) is int: 7 print(i) 8 else: 9 get_num(i) 10 11 12 get_num(l)
三元表达式
1 def my_max(a, b): 2 if a > b: 3 return a 4 else: 5 return b 6 7 8 print(my_max(1, 2)) 9 10 # 针对上述只有两种情况的判断,我们可以使用三元表达式 11 a = 1111 12 b = 2111 13 res = a if a > b else b 14 print(res)
算法之二分法
l = [1, 2, 3, 4, 5, 6, 11, 22, 34, 44, 55, 66, 67, 333, 444] # 排序 # l.sort() def my_half(target_num, l): # target_num = 34 # l # 1. 从列表中去一个中间值 middle_index = len(l) // 2 # 7 # 2. 比较 if target_num > l[middle_index]: # 要找的元素在右边 l_right = l[middle_index + 1:] my_half(target_num, l_right) print(l_right) elif target_num < l[middle_index]: # 要找的元素一定在左边 l_left = l[:middle_index] my_half(target_num, l_left) print(l_left) else: print('找到了,哈哈哈哈')
列表生成式(需要熟练掌握)
1 # 在下面列表的元素右面,加上 _dsb 2 l = ['ly', 'jason', 'tom'] 3 4 new_list = [] 5 # 第一种方式: 6 for i in l: 7 new_list.append(i +'_dsb') 8 9 print(new_list) 10 11 # 第二种方式: 12 res = [i + '_dsb' for i in l] 13 print(res) 14 15 # 传统写法: 16 for i in l: 17 if i != 'jason': 18 new_list.append(i+'_dsb') 19 else: 20 new_list.append(i) 21 22 # 列表生成式: 23 # res = [i + '_dsb' for i in l if i != 'jason' ] 24 res = [i + '_dsb' if i != 'jason' else i for i in l] 25 print(res)
字典生成式
1 # 字典生成式 2 l1 = ['name', 'age', 'hobby'] 3 l2 = ['ly', 18, 'music'] 4 # 补充: 5 for i, j in enumerate(l1, start=2): 6 print(i, j) 7 8 # 定义一个空字典 9 new_dict = {} 10 for i in range(len(l1)): 11 new_dict[l1[i]] = l2[i] 12 13 print(new_dict) 14 15 # 字典生成式 16 res = {l1[i]: l2[i] for i, j in enumerate(l1)} 17 print(res)
匿名函数
语法格式 :
lambda 参数:返回值
案例:
res = lambda x: x ** 2 print(res(2)) #输出的结果是4,2的平方

浙公网安备 33010602011771号