函数递归,二分法,三元表达式,列表生成式和字典生成式,匿名函数

递归函数

  什么是递归?

  直接 或者 间接 的调用自己,叫做递归

  递归函数的递归次数限制是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的平方

 

posted @ 2022-01-11 20:01  Damon1899  阅读(70)  评论(0)    收藏  举报