2.3、Python迭代器、列表解析及生成器(0530)

摘要:
1.动态语言sys Getrefcount()//查看对象的引用计数。增加对象的引用计数。创建场景对象时:以指定的方式,将在创建变量名称的同时创建变量。将对象添加到容器时:类似于列表Append()当一个对象作为参数传递给函数并分配了多个目标时:s1=s2=s3='abc'为对象创建另一个变量名称减少引用计数引用对象的变量名称显示为Destroyed:当delx引用对象的一个变量名时从容器中重新分配对象,它类似于列表

1、动态语言

  • sys.getrefcount()      //查看对象的引用计数
  • 增加对象的引用计数场景
  • 对象创建时:以赋值的方式,创建变量名的同时就会创建变量
  • 将对象添加进容器时:类似list.append()
  • 当对象被当作参数传递给函数时
  • 多重目标赋值时:s1 = s2 = s3 = 'abc'
  • 为对象创建另外的变量名
  • 减少引用计数
  • 引用此对象的某变量名被显示销毁:del x
  • 引用此对象的某变量名重新赋值
  • 从容器中移除对象时,类似list.pop()
  • 容器本身被销毁

if

if boolean_exprssion:

....

elif boolean_exprssion:

....

else:

....


while

while boolean_exprssion:

while_suite

if boolean_esprssion2:contine

if boolean_esprssion3:break

else

else_suite


for

for  exprssion in object:

while_suite

if boolean_esprssion2:contine

if boolean_esprssion3:break

else

else_suite


raw_input :输入一个内容

2.3、Python迭代器、列表解析及生成器(0530)第1张

for循环练习

1、逐一分开显示指定字典d1中的所有元素,类似如下

k1 v1

k2 v2

 2.3、Python迭代器、列表解析及生成器(0530)第2张

 

2、逐一显示列表中  l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']  中的索引为奇数的元素;

2.3、Python迭代器、列表解析及生成器(0530)第3张

3、将属性列表 l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],但不属于列表  l2=['Sun','Mon','Wed','Thu','Sat']  的所有元素定义为一个新列表 l3;

 2.3、Python迭代器、列表解析及生成器(0530)第4张

4、已知列表namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7'],删除列表removelist=['stu3','stu7','stu9']

     请将属于removelist列表中的每个元素从namelist中移除(属于removelist,但不属于namelist的忽略即可)

2.3、Python迭代器、列表解析及生成器(0530)第5张


非完备遍历:

在实现循环时,如果在实现索引计数时,通过range方式获取列表或某一序列的有限的索引,

比如练习2的range(1,len(l1),2)中,只遍历了索引为偶数的元素

完备遍历: 

遍历每一个元素(直接使用for循环,指定一个变量,in某一个序列或可迭代对,一定会将可迭代对象 的每一个元素都迭代一边)


python迭代

1、迭代:重复做一件

2、iterable(可迭代)对象

  • 支持每次返回自己所包含的一个成员的对象
  • 对象实现了__iter__方法
  • 序列类型,如:list,str,tuple
  • 非序列类型:如dict,file
  • 用户自定义的一些包含了__iter__()或__getitem__()方法的类

2.3、Python迭代器、列表解析及生成器(0530)第6张

迭代:重复做一件事

 2.3、Python迭代器、列表解析及生成器(0530)第7张

返回一个迭代器地址,意味着当 l1 在内存中调用 iter 方法时,在内存中就创建了一个能够遍历 l1 列表的每一个元素的迭代器

对于 listiterator 这个迭代器,可以使用next方法遍历其每一个元素,这就叫可迭代对象

2.3、Python迭代器、列表解析及生成器(0530)第8张

for i in l1:    //当使用for循环时,for循环会自动的对可迭代对象 l1 去创建并生成一个迭代器:l1.__iter__(),然后用 i 去遍历这个迭代器 (l1.__iter__()) 所生成的每一个结果;

(如果某对象内部实现了__iter__或者__getitem__方法,当对此对象调用此方法时,就会在内存中创建一个属于当前迭代器的可迭代对象,然后使用此内存中的地址的对象<listiterator at 0x1b6dc90>就可以迭代了)


迭代器

1、迭代器(iterator)又称游标(cursor),它是程序设计的软件设计模式,是一种可在容器物件(container,如列表等)上实现元素遍历的接口

2、迭代器是一种特殊的数据结构,当然在python中,它也是以对象的形式存在的

  • 简单理解方式:对于一个集体中的每一个元素,想要执行遍历,那么针对这个集体的迭代器定义了遍历集体中每一个元素的顺序或者方法

 

调用迭代器的方式不仅仅使用内部的iter,还有一个iter的函数

2.3、Python迭代器、列表解析及生成器(0530)第9张

3、在python中,迭代器是遵循迭代协议的对象

4、使用iter()可从任何序列对象中得到迭代器

5、若要实现迭代器,需要在类中定义next()方法(python3中是__next__())

6、要使得迭代器指向下一个元素,则使用成员函数next()

  • 在python中,是函数next(),而非成员函数

7、当没有元素时,则引发StopIteration异常

8、for循环可用于任何可迭代对象

for循环开始时,会通过迭代协议传递给 iter() 内置函数,从而能够从可迭代对象中获得一个迭代器,返回的对象含有需要的next方法


python列表解析 

列表解析是python迭代机制的一种应用,它常用于实现创建新的列表,因此要放置于 [] 中

语法:

2.3、Python迭代器、列表解析及生成器(0530)第10张

2.3、Python迭代器、列表解析及生成器(0530)第11张

2.3、Python迭代器、列表解析及生成器(0530)第12张

2.3、Python迭代器、列表解析及生成器(0530)第13张

2.3、Python迭代器、列表解析及生成器(0530)第14张

求1到10范围内10个数字的平方并除以2的结果(先生成1到10的平方,再遍历解析)

2.3、Python迭代器、列表解析及生成器(0530)第15张

求1到10范围内10个所有偶数的平方并除以2的结果

2.3、Python迭代器、列表解析及生成器(0530)第16张

2.3、Python迭代器、列表解析及生成器(0530)第17张

2.3、Python迭代器、列表解析及生成器(0530)第18张

两个列表 l1 = ['x','y','z'],l2 = ['1','2','3'] 逐一交叉相乘

2.3、Python迭代器、列表解析及生成器(0530)第19张

2.3、Python迭代器、列表解析及生成器(0530)第20张

列表解析:根据已有列表,高效生成新的列表的方式


生成器表达式

1、生成器表达式并不是创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目 “产生”(yield) 出来

  • 生成器表达式使用了 “惰性计算” 或称为 “延迟求值” 的机制

2、序列过长,并且每次只需要获取一个元素时,应当考虑使用生成器表达式而不是列表解析

  • 生成器表达式于python2.4引入

3、语法

2.3、Python迭代器、列表解析及生成器(0530)第21张

 2.3、Python迭代器、列表解析及生成器(0530)第22张

2.3、Python迭代器、列表解析及生成器(0530)第23张

2.3、Python迭代器、列表解析及生成器(0530)第24张

2.3、Python迭代器、列表解析及生成器(0530)第25张


产生偏移和元素

enumerate

  • range可在非完备遍历中用于生成索引偏移,而非偏移处的元素
  • 如果同时需要偏移索引和偏移元素,则可以使用enumerate()函数
  • 此内置函数返回一个生成器对象

2.3、Python迭代器、列表解析及生成器(0530)第26张                               2.3、Python迭代器、列表解析及生成器(0530)第27张

 

 

免责声明:文章转载自《2.3、Python迭代器、列表解析及生成器(0530)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MAC下go语言的安装和配置linux添加用户,修改用户密码,修改用户权限,设置root用户操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[JAVA] 运行 java HelloWorld 命令,提示“错误: 找不到或无法加载主类

肯定是哪里出了问题,需要检查命令、系统环境变量配置、代码三个方面: 命令 java运行需要先使用“javac HelloWorld.java”命令对java文件进行编译,编译会自动生成一个同名的以“.class”为后缀的类文件放在同一目录,然后再执行“java HelloWorld”来运行。(注意:此处运行“java”命令,java后只能跟文件名,不需要任...

C#中out的用法

out的用法out关键字会导致参数通过引用来传递。这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。若要使用out参数,方法定义和调用方法都必须显式使用out关键字。例如: classOutExample { static void Method(out inti) { i = 44; }...

【基于python实现UI自动化】3.0 selenium

此文转载自:https://blog.csdn.net/lht3347/article/details/108630023#commentBox python-UI自动化之selenium元素定位 1.0 selenium工具介绍 2.0 selenium环境搭建 3.0 selenium元素定位 selenium常见8大元素定位 通过ID定位...

Maven环境变量配置

环境变量: 变量名:M2_HOME 变量值:D:apache-maven-3.2.2 变量名:Path 变量值:%M2_HOME%in; 检查:win + R,输入cmd 输入mvn -v,出现如下信息,则成功 C:UsersYJ>mvn -vApache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb659...

golang闭包和range,关于闭包内使用外部变量

遇到经典问题 func mian() { resslice := []int{1, 2, 3, 4} for _, v := range resslice { fmt.Println(v) defer fun1(v) } } func fun1(value int) { fmt.Println(value) }   输出结果为...

yaml 文件中引用变量来读取 python 代码的设置值

在接口自动化测试的时候,yaml 文件一般放测试的数据或当配置文件使用,yaml 文件存放静态的数据是没问题的,python的数据类型基本上都是支持的。有时候我们想在 yaml 文件中引用变量来读取 python 代码的设置值。 一:yaml文件中是静态数据,那么,我们用python可以正常的读取。 在接口自动化中,yaml文件保存测试数据。 我们可以用p...