迭代器与生成器

迭代器

迭代:更新换代,且每次迭代都基于上一次

迭代器:迭代取值的工具(提供了不依赖索引取值的方式)

s = 'hello'
n = 0
while n < len(s):
    print(s(n))
n += 1
 
# 结果依次为h e l l o    ,相当于一个迭代器

 

需要迭代取值的数据类型有:

字符串/列表/元祖/字典/集合

 

可迭代对象

定义:内置有__iter__方法的都叫做可迭代对象(读法:双下+方法名)

Python基本数据类型中,可迭代对象有:str/list/tuple/dict/set

文件对象:本身就是迭代器(执行内置的__iter__之后还是本身,没有任何变化)

 

迭代器对象

可迭代对象执行内置的__iter__方法的得到的就是该对象的迭代器对象.

1.内置有__iter__方法    # 生成一个迭代器对象

2.内置有__next__方法    # 调用迭代器取值的方法;当可迭代对象的值被取完了,会报Stopiteration错

注:迭代器一定是可迭代对象,可迭代对象不一定是迭代器对象

# 补充:异常处理
while True:
    try:
        print(d.__next__())  # d是先经过__iter__之后生成为迭代器对象
    except Stopiteration:
        break

迭代取值特点:

优点:1.不依懒于索引取值.         2.内存中永远只占有一份空间,不会导致内存溢出

缺点:1.只能往后取,不能后退(不能获取指定的元素).       2.取完之后会报错

 

for循环内部原理

d = {'name':'jason','pwd':'123'}
for i in d:
    print(i)
# for循环后面的in后面跟的是一个可迭代对象


# for循环内部的本质:
# 1.将in后面的对象调用__iter__转换为迭代器对象
# 2.调用__next__迭代对象
# 3.内部有异常捕获stopiteration,当__next__报错,自动结束循环

 

生成器

定义:用户自定义的迭代器,本质就是迭代器

关键字:yield   执行了函数,函数内有yield,那么就会将函数变成迭代器(生成器初始化)

           函数内如果有yield关键字,那么加括号执行函数的时候并不会触发函数体代码的运行

            yield后面可返回值,可以是一个也可以是多个,并且以元祖的形式返回

            yield后面跟的值就是调用迭代器__next__方法你能得到的值

yield支持外界为其传参:如:

def boo(k):
    print('%s是个字母'%k)
    while True:
        l = yield  # l接收了yield返回的值,默认为None
        print('%s与%s不一样'%(k,l))
g = boo('o')
g.__next__()  # 必须先将代码运行至yield才能为其传值
g.send('想传啥传啥')  # 给yield左边的变量传参,自动触发__next__方法

 

yield特点:

1.帮你提供了一种自定义生成器的方式

2.会将函数的运行状态暂停住

3.可以返回值

与return的异同点:

相同点:都可以返回值,并且可以返回多个

不同点:yield可以返回多次值,return只能返回一次,然后函数立即结束;yield还可以接受外部传入的值

 

生成器表达式

格式:例子:

res = (i for i in range(1,1222) if i != 5)  # 外部以()包住

# 生成器不会主动执行任何一行代码
# 必须通过__next__触发代码的运行

 

内置函数

 abs()   求绝对值

all()  ()里有一个为false就返回False

any()  ()里有一个为True就返回True

globals()  无论在哪,查看的都是全局名称空间

locals()  当前语句在哪,就会返回哪个位置所存储的所有名字

callable()   可调用的,后面可以跟()的,目前只有函数名可以

chr()   将数字转化成ascii码表对应的字符

ord()   将字符按照ascii码表转换成对应的数字

dir()  获取当前名称空间里面的名字

divmod()   分页器

enumerat()   枚举

eval()   识别字符串里面的简单函数代码

exec()  识别字符串里面复杂逻辑的函数体代码

isinstance()  判断对象是否属于某个数据类型

pow(a,b)    a**b  a的b次方

round()  四舍五入

 

面向过程编程

提前分配好工作,就类似于设计一条流水线

好处:将复杂的问题流程化,从而简单化

坏处:可扩展性差,一旦需要修改,整体都会受到影响

 

转载于:https://www.cnblogs.com/pupy/p/11191298.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 数据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL数据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值