The Fourth Day

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了The Fourth Day相关的知识,希望对你有一定的参考价值。

迭代器

  1 迭代器:迭代的工具
  2 1.什么是迭代:指的是一个重复的过程,每次重复称为一次迭代,并且每次重复的结果是下一次重复的初始值
  3 例:
  4     while True:
  5         print(====>‘‘
  6 
  7 l=[a,b,c]
  8 count=0
  9 while count<len(l):
 10     print(l[count])
 11     count+=1
 12 
 13 2.为什么要有迭代器?
 14   对于序列类型:str,list,tuple,可以依赖索引来迭代取值,
 15   但是对于dict,set,文件,python必须为我们提供一种不依赖于索引的迭代取值的方式-》迭代器
 16 
 17 3.可迭代的对象(下列 都是):obj.__iter__
 18 name=egon
 19 l=[1,2,3]
 20 t=(1,2,3)
 21 d=[name:egon,age:18,sex:male]
 22 s={a,b,c}
 23 f=open(a.txt,w,encoding=utf-8)
 24 
 25 name.__iter__
 26 l.__iter__
 27 t.__iter__
 28 d.__iter__
 29 s.__iter__
 30 f.__iter__
 31 
 32 4.迭代器对象(只有文件是):obj.__iter__,obj.__next__
 33 f.__iter__
 34 f.__next__
 35 
 36 总结:
 37 1.可迭代对象不一定是迭代器的对象
 38 2.迭代器对象一定是可迭代器的对象
 39 3.调用obj.__iter__()方法,可迭代对象调用iter就转换成了迭代器对象,文件直接是迭代器对象(对于迭代器对象,执行__iter__得到的仍然是它本身)
 40 
 41 这个例子说明文件执行iter还是迭代器对象,返回值为True
 42 f=open(a.txt,w,encoding=utf-8)
 43 f_iter=f.__iter__().__iter__().__iter__().__iter__()
 44 print(f_iter is f)
 45 
 46 d={name:egon,age:18,sex:male}
 47 d_iter=d.__iter__()
 48  print(d_iter.__next__())
 49  print(d_iter.__next__())
 50  print(d_iter.__next__())
 51  print(d_iter.__next__()) #迭代器d_iter没有值了,就会抛出异常StopIteration
 52 
 53 
 54 f=open(a.txt,w,encoding=utf-8)
 55 f_iter=f.__iter__().__iter__().__iter__().__iter__()
 56 
 57 f=open(F:\python20期\sa.txt,r,encoding=utf-8)
 58 print(f.__next__())
 59 print(f.__next__())
 60 print(f.__next__())
 61 print(f.__next__())
 62 f.close()
 63 
 64 l=[a,b,c]
 65 l_iter=l.__iter__()
 66 print(l_iter.__next__())
 67 print(l_iter.__next__())
 68 print(l_iter.__next__())
 69 
 70 d={name:egon,age:18,sex:male}
 71 d_iter=iter(d)  #就相当于d_iter=d.__iter__()和len(obj)=obj__iter__()
 72 
 73 
 74 d={name:egon,age:18,sex:male}
 75 d_iter=iter(d)  #就相当于d_iter=d.__iter__
 76 while True:#加上这个是为了取消StopIteration报错
 77     try:#意思是监测这段代码的行为print(next(d_iter)),如果有异常就判断异常是不是StopIteration:,如果是就break
 78         print(next(d_iter))
 79     except StopIteration:
 80         break
 81 print(====>)
 82 print(====>)
 83 print(====>)
 84 print(====>)
 85 
 86 d={name:egon,age:18,sex:male}
 87 for k in d:
 88     print(k)
 89 print(====>)
 90 print(====>)
 91 print(====>)
 92 print(====>)
 93 
 94 for循环总结详解(上为实例):
 95 1.调用in后面的obj_iter=obj.__iter__()
 96 2.k=obj_iter.__next__()
 97 3.捕捉到StopIteration异常,结束迭代
 98 
 99 
100 
101 
102 #总结迭代器的优缺点:
103 #优点:
104 #1、提供一种统一的、不依赖于索引的取值方式,为for循环的实现提供了依据
105 #2、迭代器同一时间在内存中只有一个值——》更节省内存,
106 
107 #缺点:
108 #1、只能往后取,并且是一次性的
109 #2、不能统计值的个数,即长度

 生成器

 1 生成器:只有在函数体内出现yield关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器
 2 
 3 def func():
 4     print(=====>1)
 5     yield 1
 6     print(=====>2)
 7     yield 2
 8     print(=====>3)
 9     yield 3
10 
11 #生成器就是迭代器
12 # g=func()
13 ##g.__iter__和g.__next__都有,所以说生成器就是迭代器
14 #
15 #next(g)#返回值是======>1
16 #
17 #res1=next(g)
18 # print(res1)
19 #
20 #
21 # res2=next(g)
22 # print(res2)
23 #
24 #
25 # res3=next(g)
26 # print(res3)
27 #yield的功能:
28 #1、yield为我们提供了一种自定义迭代器对象的方法
29 #2、yield与return的区别1:yield可以返回多次值 #2:函数暂停与再继续的状态是由yield帮我们保存的
30 
31 obj=range(1,1000000000000000000000000000000000000000000000000000000000000000,2)
32 obj_iter=obj.__iter__()
33 print(next(obj_iter))
34 print(next(obj_iter))
35 print(next(obj_iter))
36 print(next(obj_iter))
37 print(next(obj_iter))
38 
39 def my_range(start,stop,step=1):#step步长默认为一
40     while start < stop:
41         yield start #start=1
42         start+=step #start=3
43 
44 
45 g=my_range(1,5,2)
46 print(g)
47 
48 print(next(g))
49 print(next(g))
50 print(next(g))
51 print(next(g))
52 print(next(g))
53 print(next(g))
54 print(next(g))
55 for i in my_range(1,5,2):
56     print(i)
57 
58 小练习::tail -f access.log | grep 404
59 import time
60 def tail(filepath):#文件路径
61     with open(filepath,rb) as f:#把光标放到最后
62         f.seek(0,2)#直接跑到文件末尾去了
63         while True:#循环去读
64             line=f.readline()#读一行
65             if line:#如果有值
66                 yield line#把这个值返回,让这个值持续运行
67             else:#如果没有值
68                 time.sleep(0.05)
69 
70 def grep(lines,pattern):#lines,pattern是匹配的东西
71     for line in lines:
72         line=line.decode(utf-8)#把数字转成字符串类型
73         if pattern in line:
74             yield line#只干过滤的活
75 
76 
77 lines=grep(tail(access.log),404)
78 
79 for line in lines:
80     print(line)
81 
82 
83 #了解知识点:yield表达式形式的用法
84 def eater(name):
85     print(%s ready to eat %name)
86     food_list=[]#加一个列表
87     while True:
88         food=yield food_list#food=yield=一盆骨头#只要写成yield就是生成器了,
89         food_list.append(food)
90         print(%s start to eat %s %(name,food))
91 
92 
93 e=eater(alex)
94 
95 #首先初始化:#初始化一次就是next(e)
96 print(e.send(None)) # 等同于next(e)
97 #然后e.send:1 从暂停的位置将值传给yield,在用yield给前面的变量 2、与(就是next操作)next一样
98 print(e.send(一桶泔水))
99 print(e.send(一盆骨头))

 面向编程

三元表达式

 1 def my_max(x,y):
 2     if x >= y:
 3         return x
 4     else:
 5         return y
 6 
 7 x=10
 8 y=20
 9 
10 # res=x if x >= y else y
11 # print(res)
12 
13 name=input(>>: ).strip()
14 
15 res=Sb if name == alex else NB
16 print(res)

列表推导式和生成器表达式

 1 #1 列表推导式
 2 # l=[]
 3 # for i in range(1,11):
 4 #     res=egg+str(i)
 5 #     l.append(res)
 6 #
 7 # print(l)
 8 
 9 # l=[egg+str(i) for i in range(1,11)]
10 # print(l)
11 
12 # l1=[egg+str(i) for i in range(1,11) if i >= 6]
13 # print(l1)
14 
15 # l1=[]
16 # for i in range(1,11):
17 #     if i >= 6:
18 #         l1.append(egg+str(i))
19 #
20 
21 #2 生成器表达式
22 
23 # g=(egg+str(i) for i in range(0,1000000000000000000000000000000000))
24 # print(g)
25 # print(next(g))
26 # print(next(g))
27 # print(next(g))
28 
29 
30 #练习
31 names=[egon,alex_sb,wupeiqi,yuanhao]
32 
33 # names=[name.upper() for name in names]
34 # print(names)
35 
36 # sbs=[name for name in names if name.endswith(sb)]
37 # print(sbs)
38 
39 
40 # obj=list(abcdef)
41 # print(obj)
42 
43 # print(max([1,2,3,4,5]))
44 
45 # g=(i for i in range(10))
46 # print(max(g))
47 #
48 # print(max(g))
49 
50 with open(a.txt,r,encoding=utf-8) as f:
51     # l=[]
52     # for line in f:
53     #     # print(len(line))
54     #     l.append(len(line))
55 
56     # g=(len(line) for line in f)
57     # res=max(g)
58     # print(res)
59 
60     # print(max(len(line) for line in f))
61 
62     print(sum(len(line) for line in f))

递归调用

 1 #递归调用:在调用一个函数的过程中,直接或者间接又调用该函数本身,称之为递归调用
 2 #递归必备的两个阶段:1、递推  2、回溯
 3 
 4 # import sys
 5 # print(sys.getrecursionlimit())
 6 # sys.setrecursionlimit(2000)
 7 # print(sys.getrecursionlimit())
 8 
 9 # def func(n):
10 #     print(---->,n)
11 #     func(n+1)
12 #
13 # func(0)
14 
15 
16 # def bar():
17 #     print(from bar)
18 #     func()
19 #
20 # def func():
21 #     print(from func)
22 #     bar()
23 #
24 # func()
25 
26 
27 # age(5) = age(4) + 2
28 # age(4) = age(3) + 2
29 # age(3) = age(2) + 2
30 # age(2) = age(1) + 2
31 #
32 # age(1) = 18
33 
34 # age(n)=age(n-1)+2 # n > 1
35 # age(1) = 18 #n = 1
36 
37 
38 # def age(n):
39 #     if n == 1:
40 #         return 18
41 #     return age(n-1) + 2
42 #
43 # res=age(5)
44 # print(res)
45 
46 
47 # l=[1,[2,[3,[4,[5,[6,[7,]]]]]]]
48 #
49 #
50 # def func(l):
51 #     for item in l:
52 #         if type(item) is list:
53 #             func(item)
54 #         else:
55 #             print(item)
56 
57 
58 
59 # def func():
60 #     print(===>)
61 #     func()
62 #
63 # func()

二分法

 1 #了解的知识点
 2 l=[1,2,10,30,33,99,101,200,301,402] #从小到大排列的数字列表
 3 
 4 def binary_search(l,num):
 5     print(l)
 6     if len(l) == 0:
 7         print(not exists)
 8         return
 9     mid_index=len(l) // 2
10     if num > l[mid_index]:
11         #往右找
12         binary_search(l[mid_index+1:],num)
13 
14     elif num < l[mid_index]:
15         #往左找
16         binary_search(l[0:mid_index],num)
17     else:
18         print(find it)
19 
20 # binary_search(l,301)
21 binary_search(l,302)

匿名函数

 1 # def func(): #func=内存地址
 2 #     print(from func)
 3 #
 4 # func()
 5 # func()
 6 
 7 
 8 # 内存地址
 9 # def my_sum(x,y):
10 #     return x+y
11 
12 # print(lambda x,y:x+y)
13 # print((lambda x,y:x+y)(1,2))
14 
15 # func=lambda x,y:x+y
16 # # print(func)
17 # print(func(1,2))
18 
19 
20 #max,min,sorted,map,reduce,filter
21 # salaries={
22 #     egon:3000,
23 #     alex:100000000,
24 #     wupeiqi:10000,
25 #     yuanhao:2000
26 # }
27 # print(max(salaries))
28 
29 # s=hello
30 # l=[1,2,3]
31 # g=zip(s,l)
32 # # print(g)
33 # print(list(g))
34 
35 # g=zip(salaries.values(),salaries.keys())
36 # # print(list(g))
37 # print(max(g))
38 
39 # def func(k):
40 #     return salaries[k]
41 
42 # print(max(salaries,key=func)) #key=func(egon)
43 
44 # print(max(salaries,key=lambda k:salaries[k])) #key=func(egon)
45 # print(min(salaries,key=lambda k:salaries[k])) #key=func(egon)
46 
47 
48 
49 
50 
51 
52 #sorted
53 # salaries={
54 #     egon:3000,
55 #     alex:100000000,
56 #     wupeiqi:10000,
57 #     yuanhao:2000
58 # }
59 # print(sorted(salaries,key=lambda k:salaries[k]))
60 # print(sorted(salaries,key=lambda k:salaries[k],reverse=True))
61 
62 
63 #map,reduce,filter
64 # names=[alex,wupeiqi,yuanhao]
65 # l=[]
66 # for name in names:
67 #     res=%s_SB %name
68 #     l.append(res)
69 #
70 # print(l)
71 
72 # g=map(lambda name:%s_SB %name,names)
73 # # print(g)
74 # print(list(g))
75 
76 
77 # names=[alex_sb,wupeiqi_sb,yuanhao_sb,egon]
78 # g=filter(lambda x:x.endswith(sb),names)
79 # print(g)
80 # print(list(g))
81 
82 
83 
84 from functools import reduce
85 print(reduce(lambda x,y:x+y,range(1,101),100))

内置函数

  1 #了解
  2 # print(abs(-1))
  3 
  4 # print(all([1,a,b,0]))
  5 # print(all([]))
  6 
  7 # print(any([None,False,0,1]))
  8 # print(any([]))
  9 
 10 
 11 # print(bin(11))
 12 # print(hex(11))
 13 # print(oct(11))
 14 
 15 # print(xxx.encode(utf-8))
 16 # print(bytes(xxx,encoding=utf-8))
 17 
 18 # print(callable(max))
 19 
 20 # print(chr(65))
 21 # # print(chr(90))
 22 # # print(chr(39))
 23 # print(ord(A))
 24 # print(ord(@))
 25 
 26 
 27 # import os
 28 # print(dir(os))
 29 
 30 
 31 # s=set({1,2,3})
 32 # s.add(4)
 33 # print(s)
 34 
 35 # s=frozenset({1,2,3}) #不可变集合
 36 
 37 # print(hash(xxx))
 38 
 39 # l=[1,2,a,4]
 40 # print(list(reversed(l)))
 41 
 42 
 43 # s=slice(1,5,2)
 44 # l=[a,b,c,d,e]
 45 #
 46 # # print(l[1:5:2])
 47 # # print(l[1:5:2])
 48 #
 49 # print(l[s])
 50 
 51 
 52 # print(vars() is locals())
 53 
 54 
 55 #面向对象
 56 classmethod
 57 staticmethod
 58 property
 59 
 60 
 61 hasattr
 62 getattr
 63 setattr
 64 delattr
 65 
 66 isinstance
 67 issubclass
 68 
 69 object
 70 
 71 super
 72 
 73 # obj.__dict__() #vars(obj)
 74 
 75 #__import__
 76 # choice=input(>>: )
 77 # print(choice,type(choice))
 78 #
 79 # # import time
 80 # m=__import__(choice)
 81 # m.sleep(10)
 82 
 83 
 84 
 85 #掌握:
 86 #divmod
 87 # print(divmod(10011,25))
 88 
 89 
 90 #enumerate
 91 # l=[a,b,c]
 92 
 93 # for i in l:
 94 #     print(l.index(i),i,)
 95 
 96 # for i,v in enumerate(l):
 97 #     print(i,v)
 98 
 99 #eval:
100 # res=eval([1,2,3])
101 # print(res,type(res))
102 
103 # res=exec([1,2,3])
104 # print(res)
105 
106 #pow
107 # res=pow(2,3,3) # (2 ** 3 )%3
108 # print(res)
109 
110 #round
111 # print(round(3.5))

 

以上是关于The Fourth Day的主要内容,如果未能解决你的问题,请参考以下文章

Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十四)之Type Information

环境初始化 Build and Install the Apache Thrift IDL Compiler Install the Platform Development Tools(代码片段

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段

The third day

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

python代码通过日期获得星期信息(根据日期获取星期day of the week)