Day 13迭代器生成器
迭代器
1.迭代器就是迭代的工具,迭代也可以说成是重复,并且每一次重复都是基于上一次的结果而来的,在python中一切皆对象.
2.可迭代对象:只要拥有__iter__方法的对象都是可迭代对象.
3.可迭代的对象有:python内置的str list tuplie dict set file 都是可迭代对象
- 特点:内置有__iter__方法的都叫可迭代的对象
迭代器对象
1.迭代器对象的概念
- 可迭代的对象执行
__iter__
方法得到的返回值,并且可以迭代对象会有一个__next__
方法,并且 文件本身就是迭代器对象
总结
1.可迭代对象:拥有iter方法的对象就是可迭代对象 推导:可迭代对象不一定是迭代器对象
2.迭代器对象:拥有iter方法和next方法的就是可以迭代对象, 推导:迭代器对象一定是可迭代对象
3.文件即是可迭代对象,也是迭代器对象
缺点:取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
无法使用len()方法获取长度
for 循环原理
- for 循环称为迭代器循环,in后必须是可迭代的对象
解释:因为迭代器使用 __ iter__后还是迭代器本身,因此for循环不用考虑in后的对象是可迭代对象还是迭代器对象,
三元表达式
条件成立时返回值if条件else条件不成立时的返回值
x=10
y=20
x if x>y else y
列表推导式
[i for i in range(10)]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
字典生成式
print({i: i**2 for i in range(10)})
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
zip方法
res = zip('abcd',[1,2,3,4])
dic = dict()
for k,v in res:
dic[k] = v
print(dic)
# 方法二
print({k:v for k,v in zip('abcd',[1,2,3,4])})
生成器表达式
- 把列表推导式的[]换成(),就是生成器表达式
- 优点:省内存,一次只产生一个值在内存中
- 列表推导式相当于直接给你一筐鸡蛋,而生成器表达式相当于给你一只老母鸡
# 列表推导式
with open('52.txt', 'r', encoding='utf8') as f:
nums = [len(line) for line in f]
print(max(nums))
# 生成器表达式
with open('52.txt','r',encoding='utf8') as f:
nums = (len(line) for line in f)
print(max(nums)) # ValueError: I/O operation on closed file.
yield
yield的英文单词意思是生产,在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值。
def func():
print('from 1')
yield
print('from 2')
yield
函数递归
函数的嵌套调用时:函数嵌套函数,函数的递归调用:它是一种特殊的嵌套调用,但是它在调用一个函数的过程中,又直接或间接的调用了它本身
def foo():
print('from foo')
foo()
foo() # 进入死循环
如果递归函数不断的调用函数自身,那么这个递归函数将会进入一个死循环,因此我们应该给递归函数一个明确的结束条件
1.直接调用:直接在函数内部调用函数自身
2.间接调用:不在原函数体内调用函数自身,而是通过其他的方法间接的调用函数自身
- 递归必须要有的两个明确阶段
1.递推:一层一层递归调用下去,进入下一层递归的问题规模都将会减小
2.回溯:递归碧玺要有一个明确的结束条件,找满足该条件开始一层一层回溯
3.递归的精髓在于通过不断的重复逼近一个最终的结果
Day 13迭代器生成器的更多相关文章
- Day 13 迭代器,生成器.
一.迭代器 可以进行for循环的 数据类型 str ,list tuple dict set 文件句柄 什么是可迭代对象? 方法一:dir(被测对象) 如果他含有__iter__,那这个对象就叫做可迭 ...
- Python 迭代器&生成器
1.内置参数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice ...
- python杂记-4(迭代器&生成器)
#!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- python 迭代器 生成器
迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
- Python基础-迭代器&生成器&装饰器
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...
- 迭代器/生成器/装饰器 /Json & pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- Learn day5 迭代器\生成器\高阶函数\推导式\内置函数\模块(math.time)
1.迭代器 # ### 迭代器 """能被next调用,并不断返回下一个值的对象""" """ 特征:迭代器会 ...
- Python装饰器、迭代器&生成器、re正则表达式、字符串格式化
Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
随机推荐
- BZOJ 3119 Book (贪心+数学推导)
手动博客搬家: 本文发表于20191029 22:49:41, 原地址https://blog.csdn.net/suncongbo/article/details/78388925 URL: htt ...
- 【Codeforces Round #519 by Botan Investments D】Mysterious Crime
[链接] 我是链接,点我呀:) [题意] 相当于问你这m个数组的任意长度公共子串的个数 [题解] 枚举第1个数组以i为起点的子串. 假设i..j是以i开头的子串能匹配的最长的长度. (这个j可以给2. ...
- Spring Boot-properties使用(二)
自定义属性 @value注入 在application.properties新增配置 student.name=小明student.age=12student.info=${student.name} ...
- Html5最简单的游戏Demo——Canvas绘图的骰子
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- 0807再整理SQL执行流程
转自http://www.cnblogs.com/annsshadow/p/5037667.html MySQL架构总览->查询执行流程->SQL解析顺序 前言: 一直是想知道一条SQ ...
- hdu5326 Work
题目链接:点击打开链接 题目大意:有n个人.各自管理不同的人,问有多少人管理k个人. 思路:先记录每一个人的直接上级.然后模拟路径压缩的过程进行计数求和. #include<stdio.h> ...
- Tomcat启动时载入某个servlet
当我们做一个java项目时,有几个功能都须要载入servlet或者实现某个共同的方法,尽管我们一味地在每个功能中依次载入也不是不能够,可是当某个servlet 或者方法被频繁地载入和应用.我们将面向对 ...
- S 禁止F12和右键操作控制台,兼容各浏览器
document.oncontextmenu = function () { return false; }; document.onkeydown = function () { ...
- C#之简易猜数字游戏
游戏规则说明: 由系统生成一个随机数,玩家有三次猜数字的机会,如果在三次内猜出数字反馈玩家猜对了,否则Game Over! 代码设计说明: 1.首先设计一个简易的欢迎界面,并提示玩家是否开始游戏: p ...
- PL SQL Developer client 连接server
安装完Oracle,PLSQL之后,在server中打开监听. 计算机右键-管理-服务和应用程序-服务-打开以Oracle开头的服务,特别是监听,这个最重要.详细如图所看到的. (1)配置监听的位置 ...