Python学习第四天

迭代器:

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完才结束。迭代器只能向前不会后退,不过这没什么大不了的,因为人们很少在迭代中往后退。另外,迭代器的一大优点是不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件。

特点:

1、  访问者不需要关心迭代器内部的结构,仅需要通过next()方法不断去取下一个内容。

2、  不能随机访问集合中的某个值,只能从头到尾依次访问。

3、  访问到一半时不能往回退。

4、  便于循环比较大的数据集合,节省内存。

1 names=iter([‘alex‘,‘jack‘,‘rain‘])
2 print(names)
3 print(names.__next__())
4 print(names.__next__())
5
6 <list_iterator object at 0x006ED2B0>
7 alex
8 jack

生成器的使用:

定义:一个函数调用的时候返回一个迭代器,那这个函数就叫做生成器,如果函数中包含yield语法,那这个函数就会变成生成器。

 1 def cash_out(amount):
 2    while amount>0:
 3        amount-=100
 4        yield 100
 5 print(‘又来取钱呢啦!‘)
 6 atm=cash_out(500)
 7 print(type(atm))
 8 print(atm.__next__())
 9 print(atm.__next__())
10 print(‘叫个大保健…‘)
11 print(atm.__next__())
12
13 又来取钱呢啦!
14 <class ‘generator‘>
15 100
16 100
17 叫个大保健…
18 100

作用:

这个yield的主要效果呢,就是可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行。

另外,还可通过yield实现在单线程的情况下实现并发运算的效果(这就是我们所熟知的生产者-消费者模型)

生产者-消费者模型:

 1 import time
 2 def consumer(name):
 3     print("%s 准备吃包子啦!" %name)
 4     while True:
 5        baozi = yield
 6
 7        print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
 8
 9 def producer(name):
10     c = consumer(‘A‘)
11     c2 = consumer(‘B‘)
12     c.__next__()
13     c2.__next__()
14     print("老子开始准备做包子啦!")
15     for i in range(10):
16         time.sleep(1)
17         print("做了2个包子!")
18         c.send(i)
19         c2.send(i)
20
21 producer("alex")

装饰器原理介绍和基本实现:

时间: 2024-08-20 00:37:22

Python学习第四天的相关文章

python学习第四十八天json模块与pickle模块差异

在开发过程中,字符串和python数据类型进行转换,下面比较python学习第四十八天json模块与pickle模块差异. json 的优点和缺点 优点  跨语言,体积小 缺点 只能支持 int str list tuple dict pickle 的优点和缺点 优点 专门为python设计,支持python所有的数据类型 缺点 只能python使用,存储数据占空间大 文章来自 www.96net.com.cn 原文地址:https://www.cnblogs.com/96net/p/97806

Python学习第四天学习写的小案例(主要是针对 分支/循环的学习)

Python学习第四天学习写的小案例 (2019/07/17) 第一题:使用while循环输出1 2 3 4 5 6 8 9 10 程序代码: s = 0 while s<10: if s==6: s += 1 # 当数字为7的时候输出一个空格出来 print(end=' ') continue s += 1 print(s,end=' ') 运行结果: 1 2 3 4 5 6 8 9 10 第二题: 求1-100的所有数的和 程序代码: count = 0 for i in range(101

python学习-第四天补充-面向对象

python学习-第四天补充-面向对象 python 私有 --name mangling(名字修改.名字) 在命名时,通过使用两个下划线作为开头,可以使得这个变量或者函数编程私有的,但是这个其实的python的伪私有,实际是python通过名字修改来进行的,python会把这样命名的变量或者函数名改为_类名__变量名 class A: __name="hello" t = A(); #print(t.__name) #这样会出现错误,错误提示说这个变量没有__name类型 print

我的python学习--第四天

一.首先是对前三天的学习内容进行复习 1.python基础的数据结构 数字(int/float,包括整数和浮点数) 布尔(boolean => True/False) 字符串(str,使用''或""括起来) 列表(list) 列表是使用[]括起来的一组数组,在内存中是连续的,可以对其增删改查 字典(dict) 字典是使用{}括起来的k/v键值对,经过哈希计算随机分布在内存中,是无序的,可以对其增删改查 元组(tuple) 元组与列表类似,不同之处在于元组的元素不能修改,元组使用小

Python学习(四)cPickle的用法

python中有两个类似的:pickle与cPickle:两者的关系:“cPickle – A faster pickle” pickle模块中的两个主要函数是dump()和load().dump()函数接受一个文件句柄和一个数据对象作为参数,把数据对象以特定的格式保存到给定的文件中.当我们使用load()函数从文件中取出已保存的对象时,pickle知道如何恢复这些对象到它们本来的格式. cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象

Python学习十四:filter()

Python 中内置了filter()函数用于过滤序列. 用法: filter()接收一个函数和一个序列.filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. demo: 1.在一个list中,删掉偶数,只保留奇数: #filter odd number in the list def is_odd(n): return n % 2 == 1 print filter(is_odd , [1 , 2 , 3 , 4 , 5 , 6 , 9

Python 学习第四弹:编码问题(转载)

关于python的编码问题一直以来不得解,终于在今天从这篇博文中明白了. 原文地址: http://nedbatchelder.com/text/unipain.html 译文地址:http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue5/unipain.html 译者: yudun1989 实用Unicode编程指南 这是我在 Pycon2012 所做的演讲.你可以阅读本页的幻灯片和文字,或者直接在浏览器中打开 演示 ,或者

Python学习笔记(四)

一.list创建 list 是Python语言中一种内置的数据类型 list 中可以存放不同类型的数据 list = []  #创建一个空列表 list = [1,2,3] #创建一个非空列表,并初始化其元素为1,2,3 二.list长度 使用 len(list_变量) 可以测得list的长度 三.list切片 list = [1,2,3,4,5,6,7,8,9,10] print(list[3:])  #4,5,6,7,8,9,10 print(list[3:5]) #4,5 print(li

python学习笔记(四):函数

一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method. 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 二.使用函数的好处: 1.简化代码2.提高代码的复用性3.代码可扩展 三.p

迭代器与函数Python学习(四)

1.1 迭代器: 迭代的工具 1.1.1 什么是迭代: 指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值 while True: print('=====>') l=['a','b','c'] count=0 while count < len(l): print(l[count]) count+=1   1.1.2 为什么要有迭代器? 对于序列类型:str,list,tuple,可以依赖索引来迭代取值, 但是对于dict,set,文件,python必须为