Python函数进阶


一.递归函数

递归:函数在运行过程中 直接或者间接的调用了自身 递归一定要有结束条件。

官网表示:Python的默认的最大的递归深度为1000次

 1 l = [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, ]]]]]]]]]]]]]]
 2 def outer(l):
 3     for i in l:
 4         if type(i) == int:
 5             print(i)
 6         else:
 7             outer(i)
 8 
 9 
10 outer(l)

递归函数分为

1.递推:一层层往下推导答案(每次递归之后复杂度相较于上一次一定要有所下降)

2.回溯:依据最后的结论往后推导出最初需要的答案

二.算法之二分法

2.1 什么是算法

解决问题的高效方法

2.2 二分法

第一种方式 直接for循环从左往右依次查找

1 while True:
2     number = input('请输入您要查找的数字').strip()
3     number = int(number)
4     if number not in l:
5         print('暂无此数据')
6     else:
7         for i in l:
8             if i == number:
9                 print('找到了')

第二种方式 二分法(一 数集;二 必须有序)

 1 def outer(target_number, l):
 2     if len(l) == 0:
 3         print('无此数据')
 4         return
 5     # 获取中间元素的索引值
 6     midle_numebr = len(l) // 2
 7     # 以中间函数为分界线对l进行切片
 8     if target_number > l[midle_numebr]:
 9         l_right = l[midle_numebr + 1:]
10         outer(target_number, l_right)
11     elif target_number < l[midle_numebr]:
12         l_left = l[:midle_numebr]
13         outer(target_number, l_left)
14     else:
15         print(target_number, '找到了')

三.三元表达式

当功能需求仅仅是二选一的情况下,那么推荐使用三元表达式

1 def my_max(a, b):
2     if a > b:
3         return a
4     else:
5         return b

条件成立采用if前面的值,if条件不成立采用else后面的值

1 def my_max(a, b):
2     return a if a > b else b

四.列表生成式

 1 name_list = ['jason', 'kevin', 'tony', 'jerry']
 2 # 给列表中所有的人名加上_DSB后缀
 3 '''传统做法'''
 4 # 1.定义一个空列表
 5 new_list = []
 6 # 2.for循环老列表
 7 for name in name_list:
 8     # 3.生成新的名字
 9     new_name = '%s_DSB'%name
10     # 4.添加到新的列表中
11     new_list.append(new_name)
12     print(new_list)
13 '''列表生成式'''
14 res = ['%s_DSB' % name for name in name_list]
15 print(res)

五.字典生成式

 1 # 字典生成式
 2 l1 = ['name', 'age', 'hobby']
 3 l2 = ['jason', 18, 'read']
 4 for i, j in enumerate(l1, start=1):
 5     print(i, j)
 6 """
 7 1 name
 8 2 age
 9 3 hobby
10 
11 enumerate()
12 针对该方法使用for循环取值 每次都会产生两个结果
13    第一个是从零开始的数字
14    第二个是被循环对象里面的元素
15 还可以通过start控制参数其实位置
16 """
17 
18 name_list = ['jason', 'kevin', 'tony', 'jerry']
19 res = {i: j for i, j in enumerate(name_list)}
20 print(res)

六.匿名函数

 1 # 字典生成式
 2 l1 = ['name', 'age', 'hobby']
 3 l2 = ['jason', 18, 'read']
 4 for i, j in enumerate(l1, start=1):
 5     print(i, j)
 6 """
 7 1 name
 8 2 age
 9 3 hobby
10 
11 enumerate()
12 针对该方法使用for循环取值 每次都会产生两个结果
13    第一个是从零开始的数字
14    第二个是被循环对象里面的元素
15 还可以通过start控制参数其实位置
16 """
17 
18 name_list = ['jason', 'kevin', 'tony', 'jerry']
19 res = {i: j for i, j in enumerate(name_list)}
20 print(res)

相关