本节内容


1.迭代器协议与for循环

2.三元表达式

3.解压序列

4.列表解析

5.生成器

迭代器协议与for循环

1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中下一项,要么引起异常报错(因为迭代到头了,只能往后走不能倒退)

2.可迭代对象:实现了迭代器协议的对象(其实python中所有对象都不是可迭代对象,如何实现:对象内部定义一个__iter__方法)

3.协议就是一种约定,可迭代对象实现了迭代器协议,python内部工具(如for循环,sum,max等)使用迭代器协议访问对象。

i = [,,,]
a = i.__iter__() #将i变成可迭代对象
print(a.__next__()) #
print(a.__next__()) #
print(a.__next__()) #
print(a.__next__()) #

那么for 循环是怎么做的呢?


for循环做了两件事,第一件事就是把传入for循环对象使用__iter__方法,使其变成可迭代对象,之后每次使用都引用了__next__方法

第二件事就是:next到头,也就是迭代到头了会报错嘛,而for循环就自动为我们处理了报错

for a in i:
print(a)

注意:while循环的工作机制并不是迭代循环,而是索引循环,所以不能循环字典、集合、文件等迭代对象,使用for循环,还能节省内存因为遍历一个扔一个

三元表达式

l = ['鸡蛋%s' %i for i in range(10) if i>5 ]
print(l)

三元表达式其实就是简略式编程

name = 'ecohboy'

a = '帅哥'if name == 'ecohboy' else 'sb'
print(a)

if 左边为若真的操作,中间是判断语句,右边为否则操作 但只适用于简单逻辑。

列表解析


l = ['鸡蛋%s' %i for i in range(10) if i>5 ]
print(l)

解压序列


l = [1,2,3,4,5,6,7]
a,*b,c = l
print(a,b,c)

解压序列就是一一对应取值,但用这种方法可以不通过索引也可以取到开头与结尾的值

生成器


生成器可以理解为一个数据类型,但他自动实现了迭代器协议(不用调用__iter__方法)所以生成器就是可迭代对象

1.生成器函数配合yeild(返回值)使用:

def test():
yield 1
yield 2
yield 3
yield 4 g = test()
print(g)
print(g.__next__()) #1
print(g.__next__()) #2
print(g.__next__()) #3
print(g.__next__()) #4

2.生成器表达式

laomuji = ('鸡蛋%s' %i for i in range(10))
print(laomuji.__next__()) #鸡蛋0
print(laomuji.__next__()) #鸡蛋1
print(laomuji.__next__())
print(laomuji.__next__())

生成器表达式实际就是把列表解析【】改成()

解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列的更多相关文章

  1. Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化

    一.装饰器 一.装饰器的知识储备 1.可变长参数  :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...

  2. 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式

    一.装饰器 一.装饰器的知识储备 不想修改函数的调用方式,但是还想在原来的函数前后添加功能 1.可变长参数  :*args和**kwargs def index(name,age): print(na ...

  3. Python开发——函数【迭代器、生成器、三元表达式、列表解析】

    递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...

  4. Python day14迭代器,三元表达式,列表解析以及生成器表达式

    1.迭代器 str=['sds','ccc','dw'] lit_1=str.__iter__()#获取迭代器 print(lit_1.__next__())#打印下一个值 # 用while做for的 ...

  5. Python中的可迭代对象/迭代器/For循环工作机制/生成器

    本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...

  6. python的迭代器、生成器、三元运算、列表解析、生成器表达式

    一 迭代的概念 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前 ...

  7. 周末学习笔记——day02(带参装饰器,wraps修改文档注释,三元表达式,列表字典推导式,迭代器,生成器,枚举对象,递归)

    一,复习 ''' 1.函数的参数:实参与形参 形参:定义函数()中出现的参数 实参:调用函数()中出现的参数 形参拿到实参的值,如果整体赋值(自己改变存放值的地址),实参不会改变,(可变类型)如果修改 ...

  8. Python(迭代、三元表达式、列表生成、生成器、迭代器)

    迭代 什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). ...

  9. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

随机推荐

  1. 安卓banner图片轮播

    之前写过一篇关于首页图片广告轮播的demo:http://blog.csdn.net/baiyuliang2013/article/details/45740091,不过图片轮播的指示器(小白点)处操 ...

  2. iOS开发之八:UISlider、UISegmentedControl、UIPageControl的使用

    本文的三种控件,用的也非常多,而我也是经常图懒,而去打开原来的项目去拷贝,现在记录一下,就不用去项目中去找这些控件的用法了. 一.UIActivityIndicatorView 的使用 UIActiv ...

  3. 【一天一道LeetCode】#84. Largest Rectangle in Histogram

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given n ...

  4. Java 8新特性探究(三)泛型的目标类型推断

    简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法 ...

  5. Chapter 2 User Authentication, Authorization, and Security(2):创建登录帐号

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38705965,专题目录:http://blog.csdn.net/dba_huangzj ...

  6. Linux Debugging(一): 使用反汇编理解C++程序函数调用栈

    拿到CoreDump后,如果看到的地址都是????,那么基本上可以确定,程序的栈被破坏掉了.GDB也是使用函数的调用栈去还原"事故现场"的.因此理解函数调用栈,是使用GDB进行现场 ...

  7. pig运行方法:本地与云上

    pig脚本 放在本地当前目录(键入pig命令时,所处的目录),然后用进入grunt,用run或者exec调用 1云运行: 键入pig进入grunt,用run命令运行当前目录脚本.(或者外部用pig - ...

  8. Java接口interface

    Java接口interface 1.多个无关的类可以实现同一个接口. 2.一个类可以实现多个无关的接口. 3.与继承关系类似,接口与实现类之间存在多态性. 接口(interface)是抽象方法和常量值 ...

  9. linux 下停止java jar包 shell

    linux 下停止java jar包 shell http://injavawetrust.iteye.com #!/bin/sh APP_HOME=/home/ap/injavawetrust/ba ...

  10. 异常驱动的开发(Exception-Driven Development)

    你的网站或应用程序存在哪些问题?如果你在等着用户来告诉你,那么你只能看到所有的问题中已经暴露的那极小的一部分.要知道,那只是"冰山一角"! 而且,如果你真的是在守株待兔,我不得不很 ...