灵虚御风
醉饮千觞不知愁,忘川来生空余恨!

导航

 

"""

今日知识点:
0.sys模块--补充
 1 """
 2 # 补充:
 3 sys模块   (建文件防止重命名)  系统(意思)
 4 sys 功能: SYS可将当前驱动器上的DOS系统文件IO.SYS,MSDOS.SYS传送到指定的驱动器上,用于创建启动盘。
 5 """
 6 import sys
 7 # 求Python可支持的递归深度
 8 print(sys.getrecursionlimit())  # 1000  # 结果不是很精确
 9 # 自定义递归深度
10 sys.setrecursionlimit(200)  # 不能高于最大值
11 print(sys.getrecursionlimit())  # 200
sys模块 -补充
1.函数递归
 1 """
 2 函数的递归:
 3 1.定义
 4     1.函数在调用阶段直接或间接的调用自身
 5     2.判断特点:调用自身
 6     3.方法:直接调用 | 间接调用
 7     4.必须条件,不应该无限循环下下去,需要有最终的结束条件
 8 
 9 """
10 '''
11 # 函数自调用
12 def func():
13     print('递归')
14     func()
15 func()
16 # 值:
17 RecursionError: maximum recursion depth exceeded while calling a Python object 
18 # 递归错误:调用python对象时超过了最大递归深度
19 '''
20 # 求递归深度方法
21 # 方法一
22 """
23 import sys
24 # 求Python可支持的递归深度
25 print(sys.getrecursionlimit())  # 1000  # 结果不是很精确
26 # 自定义递归深度
27 sys.setrecursionlimit(200)  # 不能高于最大值
28 print(sys.getrecursionlimit())  # 200
29 """
30 
31 '''
32 # 方法二
33 def func(n):
34     print('n>>>:',n)
35     func(n+1)
36 func(1)  # n 记得传参
37 
38 # 值: 递归深度  == 998 # 之后报错
39 RecursionError: maximum recursion depth exceeded while calling a Python object
40 # 递归错误:调用python对象时超过了最大递归深度
41 '''
42 '''
43 # 函数不应该无限制的递归下去
44 def index():
45     print('from index')
46     login()
47 
48 def login():
49     print('from login')
50     index()
51 
52 login()
53 
54 # 值
55 报错:
56 RecursionError: maximum recursion depth exceeded while calling a Python object
57 # 递归错误:调用python对象时超过了最大递归深度
58 '''
59 """
60 2.递归的过程:
61      递归分为两个阶段:
62         1.回溯:1.就是一次次重复的过程,这个重复的过程必须建立在,这个过程每次重复复杂度都会相应下降 2.直到有一个最终的结束条件
63         2.递推:一次次往回推导的过程
64 """
65 # 案例:
66 # 递归函数
67 '''
68 age(5) = age(4) + 2
69 age(4) = age(3) + 2
70 age(3) = age(2) + 2
71 age(2) = age(1) + 2
72 age(1) = 18
73 age(n) = age(n-1) + 2  # n > 1
74 age(1) = 18 # n = 1
75 '''
76 def get_age(n):
77     if n == 1:
78         return 18
79     return get_age(n-1)+2
80 res = get_age(12)
81 print(res)  # 40
82 
83 def get_time(s):
84     if s == 1:
85         return 18
86     return get_time(s-1) - 1
87 res1 = get_time(4)
88 print(res1)  # 15
函数递归
 1 l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]
 2 # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)
 3 # print(l[0]) # 1
 4 # print(l[1][0]) # 2
 5 # print(l[1][1][0]) # 3
 6 # l2 = []
 7 # for i in l:
 8 #     if type(i) is int:
 9 #         l2.append(i)
10 # print(l2)
11 
12 
13 def get_list(l):
14     l1 = []
15     for i in l:
16         if type(i) is int:
17             print(i)
18             l1.append(i)
19         else:
20             get_list(i)
21 
22 res = get_list(l)
23 # print(res)
24 l2 = []
25 l1 = []
26 print(l)
27 for i in l1:
28     print(i)
29 
30 #ps: 递归函数不要考虑循环的次数 只需要把握结束的条件即可********** 结束的条件
函数递归案例
2.二分法
ps:容器里的数字必须有大小顺序
 1 # 算法:解决问题的高效率的方法
 2 l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
 3 # num = 345
 4 # for i in l:
 5 #     if num == i:
 6 #         print('1222234586')
 7 #ps: 二分法:容器类型里面的数字必须有大小顺序
 8 # target_num = 999
 9 def get_num(l,target_num):
10     if not l:
11         print('无对比值,无法顺利工作')
12         return
13     else:
14         # 获取列表中间的索引
15         print(l)
16         middle_index = len(l) // 2
17         # 判断target_num 和l[middle_index] 数字的大小
18         if target_num > l[middle_index]:
19             # 窃取列表右半部分
20             num_right = l[middle_index + 1:]   # 后半部分
21             # 再递归调用get_num函数
22             get_num(num_right, target_num)
23         elif target_num < l[middle_index]:
24             num_left = l[0:middle_index]  # 前半部分
25             # 再递归调用get_num函数
26             get_num(num_left, target_num)
27         else:  # ==
28             print('find it',target_num)
29 
30 res = get_num(l,target_num=345)
31 print(res)
32 '''
33 # 值
34 [1, 3, 5, 12, 57, 89, 101, 123, 146, 167, 179, 189, 345]
35 [123, 146, 167, 179, 189, 345]
36 [189, 345]
37 find it 345
38 None
39 '''
二分法
3.三元表达式
 1 def my_max(x,y):
 2     if x > y:
 3         return x
 4     else:
 5         return y
 6 """
 7 当x大的时候返回x当y大的时候返回y
 8 当某个条件成立做一件事,不成立做另外一件事
 9 """
10 x = 99999
11 y = 9898898
12 res = x if x > y else y
13 # 如果if后面的条件成立返回if前面的值 否则返回else后面的值
14 print(res)
15 
16 
17 """
18 三元表达式固定表达式
19     值1 if 条件 else 值2
20         条件成立 值1
21         条件不成立 值2
22 """
23 # x = 1
24 # y = 2
25 # m = 3
26 # n = 4
27 # res = x if x > y else (m if m >n else (...))
28 
29 # 三元表达式的应用场景只推荐只有两种的情况的可能下
30 # is_free = input('请输入是否免费(y/n)>>>:')
31 # is_free = '免费' if is_free == 'y' else '收费'
32 # print(is_free)
33 
34 
35 # username = input('username>>>:')
36 # res = 'NB' if username == 'jason' else '垃圾'
37 # print(res)
三元表达式
4.列表生成式
 1 # 列表生成式 [列表值,for循环条件]
 2 
 3 l = ['tank','nick','oscar','sean']
 4 l1 = []
 5 for name in l:
 6     # 加后缀的两种方式
 7     l1.append('%s_sb'%name)
 8     l1.append(name + '_sb')  # 加后缀
 9 print(l1)
10 
11 l = ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb','jason_NB']
12 # 列表生成式:
13 res = ['%s_DSB'%name for name in l]
14 print(res)  # ['tank_sb_DSB', 'nick_sb_DSB', 'oscar_sb_DSB', 'sean_sb_DSB', 'jason_NB_DSB']
15 
16 res1 = [name for name in l if name.endswith('_sb')]  # 后面不支持再加else的情况
17 # 先for循环依次取出列表里面的每一个元素
18 # 然后交由if判断  条件成立才会交给for前面的代码
19 # 如果条件不成立 当前的元素 直接舍弃
20 
21 print(res1)  # ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb']
列表生成式
5.字典生成式
 1 # 字典生成式  列表与for生成字典
 2 
 3 # l1 = ['name','password','hobby']
 4 # l2 = ['jason','123','DBJ','egon']
 5 # d = {}
 6 # for i,j in enumerate(l1):
 7 #     d[i] = l2[i]
 8 # print(d)  # {0: 'jason', 1: '123', 2: 'DBJ'}
 9 
10 l1 = ['jason','123','read']
11 # 字典生成式格式
12 d = {i:j for i,j in enumerate(l1) if j != '123'}
13 print(d)  # {0: 'jason', 2: 'read'}
14 
15 res = {i for i in range(10) if i != 4}
16 print(res)
17 res1 = (i for i in range(10) if i != 4)  # 这样写不是元组生成式 而是生成器表达式
18 # print(res1)
19 # for i in res1:
20 #     print(i)
字典生成式
6.匿名函数
 1 """
 2 匿名函数:
 3    特性:
 4        1.没有名字函数
 5        2.临时存在用完就没了
 6 
 7 """
 8 # 正常函数
 9 def func(x,y):
10     return x,y
11 # 匿名函数
12 '''
13 1.省略 def
14 2.用lambda代替函数名
15 3.return x+y 省略 用: x+y
16 '''
17 # 格式:
18 res = (lambda x,y:x+y)
19 # print(res)
20 print(res(1,2))  # 3
21 
22 # ps:
23 # 1.:左边的相当于函数的形参
24 # 2.:右边的相当于函数的返回值
25 # 3.匿名函数通常不会单独使用,是配合内置函数一起使用
匿名函数
7.常用内置函数
 1 # 1.max()  # 求最大值
 2 l = [1,2,3,4,5]
 3 print(max(l))  # 内部是基于for循环的  # 5
 4 # 2.min() # 求最小值
 5 print(min(l)) # 1
 6 # 3.chr() 将数字转换成ascii码表对应的字符  # a
 7 # A-Z  65 90
 8 # a-z  97 122
 9 # 4.zip()拉链
10 l1 = [1,2,3]
11 l2 = ['jason','egon','tank']
12 l3 = ['a','b','c']
13 print(list(zip(l1,l2,l3)))   # [(1, 'jason', 'a'), (2, 'egon', 'b'), (3, 'tank', 'c')]
14 # 5.filter() 过滤
15 l = [1,2,3,4,5,6]
16 print(list(filter(lambda x:x != 3,l)))  # 基于for循环  #[1, 2, 4, 5, 6]
17 # 6.sorted() 排序
18 l = ['jason','egon','nick','tank']
19 # reverse # 颠倒
20 print(sorted(l,reverse=False)) #['egon', 'jason', 'nick', 'tank']
21 # reverse= True['tank', 'nick', 'jason', 'egon']
22 # 7.reduce() 求列表的运算
23 from functools import reduce
24 l = [1,2,3,4,5,6]
25 print(reduce(lambda x,y:x+y,l,18))  # 39
26 # 8.map()  # 映射
27 l = [1,2,3,4,5,6]
28 # print(list('hello'))
29 print(list(map(lambda x:x+5,l)))  # 基于for循环  # [6, 7, 8, 9, 10, 11]
常用内置函数

 

"""

posted on 2019-07-12 20:26  没有如果,只看将来  阅读(141)  评论(0编辑  收藏  举报