博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
The Fourth Day
阅读量:4670 次
发布时间:2019-06-09

本文共 8986 字,大约阅读时间需要 29 分钟。

迭代器

1 迭代器:迭代的工具  2 1.什么是迭代:指的是一个重复的过程,每次重复称为一次迭代,并且每次重复的结果是下一次重复的初始值  3 例:  4     while True:  5         print('====>'')  6   7 l=['a','b','c']  8 count=0  9 while count
') 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 310 11 #生成器就是迭代器12 # g=func()13 ##g.__iter__和g.__next__都有,所以说生成器就是迭代器14 #15 #next(g)#返回值是======>116 #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=142         start+=step #start=343 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 time60 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 y11 # 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) + 228 # age(4) = age(3) + 229 # age(3) = age(2) + 230 # age(2) = age(1) + 231 #32 # age(1) = 1833 34 # age(n)=age(n-1)+2 # n > 135 # age(1) = 18 #n = 136 37 38 # def age(n):39 #     if n == 1:40 #         return 1841 #     return age(n-1) + 242 #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) // 210     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+y11 12 # print(lambda x,y:x+y)13 # print((lambda x,y:x+y)(1,2))14 15 # func=lambda x,y:x+y16 # # print(func)17 # print(func(1,2))18 19 20 #max,min,sorted,map,reduce,filter21 # salaries={22 #     'egon':3000,23 #     'alex':100000000,24 #     'wupeiqi':10000,25 #     'yuanhao':200026 # }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 #sorted53 # salaries={54 #     'egon':3000,55 #     'alex':100000000,56 #     'wupeiqi':10000,57 #     'yuanhao':200058 # }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,filter64 # names=['alex','wupeiqi','yuanhao']65 # l=[]66 # for name in names:67 #     res='%s_SB' %name68 #     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 reduce85 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 #pow107 # res=pow(2,3,3) # (2 ** 3 )%3108 # print(res)109 110 #round111 # print(round(3.5))

 

转载于:https://www.cnblogs.com/yinfutao/p/8119852.html

你可能感兴趣的文章
[APIO2015]雅加达的摩天楼
查看>>
andorid之帧布局FrameLayout
查看>>
(转,记录用)jQuery页面加载初始化的3种方法
查看>>
C++常量的引用 const
查看>>
51nod 1101 换零钱 【完全背包变形/无限件可取】
查看>>
python单例设计模式(待补充)
查看>>
Binary Tree Inorder Traversal
查看>>
HDU 1394 Minimum Inversion Number (数据结构-线段树)
查看>>
ansible-playbook && Roles && include
查看>>
String s String s=null和String s="a"区别
查看>>
[Alpha阶段]第二次Scrum Meeting
查看>>
关于Java 8 forEach
查看>>
.NET设计模式(1):1.1 单例模式(Singleton Pattern)
查看>>
创建模态对话框和非模态对话框
查看>>
08-图8 How Long Does It Take
查看>>
二维数组中最大连通子数组
查看>>
java 正则表达式-忽略大小写与多行匹配
查看>>
mac 上亚马逊密钥登录
查看>>
css选择器中:first-child与:first-of-type的区别
查看>>
nopcommerce 二次开发
查看>>