python第四天高级特性
切片操作 :如何取前三个元素,通过循环?可以通过切片操作
L[0:3],其中第一个参数表示切片的开始元素;第二个参数表示取到第几个元素结束;第三个参数表示取值时的跳跃间隔。
倒数切片:L[-2:]输出的是 8,9
tuple和list一样具有切片操作特性,字符串也是一种list,因此字符串也可以进行切片,只是操作的结果是字符串
迭代:只要是可迭代对象,不管它是list还是tuple集合
dict集合的迭代
1.key迭代
2.value迭代
3.key和value一起迭代
判断一个对象是否可以迭代?通过collections模块的Iterable类型判断
如果要对list实现类似java的下标循环怎么办,python内置的enumerate函数把一个list变成索引-元素对
列表生成式
一行语句生成list集合
使用两层循环,可以生成全排列
生成器:在循环中不断的推算出后续元素,不需要创建完整的list。一边循环一边计算的机制叫做生成器。
创建一个生成器,有很多方法。第一种只要把列表生成式的[]改成(),就创建一个generator;
1.如果一个一个打印出来,可以通过next()函数获得generator的下一个返回值:每次调用next(g)就计算出g的下一个元素的值,直到ji最后一个元素,没有更多元素时,抛出stopIteration的错误。
2.直接for循环,因为generator对象是可迭代的。
第二种生成generator的方法,只要一个函数定义中包含yield关键字,那就不是普通函数。而是generator
generator和函数的执行流程不一样,函数是顺序执行,而generator函数,在每次调用next()的时候执行,遇到yield语句返回。
再次执行时从上一次返回的yield语句处继续执行。如果想拿到generator的return语句的返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中。
迭代器:可以被next()函数调用并不断返回下一个值的对象成为迭代器,Iterationlist ,str ,tuple,生成器都是可迭代的Iterable,isinstance([],Iterable)是true,但是生成器是Iteration对象,而list,str,tuple则不是Iteration对象。isinstance([],Interation)是false、
list,str,tuple可以通过iter()函数变成Iteration对象 isinstance(iter([]),Iteration)值为true