迭代器

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迭代器生成器的更多相关文章

  1. Day 13 迭代器,生成器.

    一.迭代器 可以进行for循环的 数据类型 str ,list tuple dict set 文件句柄 什么是可迭代对象? 方法一:dir(被测对象) 如果他含有__iter__,那这个对象就叫做可迭 ...

  2. Python 迭代器&生成器

    1.内置参数     Built-in Functions     abs() dict() help() min() setattr() all() dir() hex() next() slice ...

  3. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

  4. Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式

    目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...

  5. python 迭代器 生成器

    迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  6. Python基础-迭代器&生成器&装饰器

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...

  7. 迭代器/生成器/装饰器 /Json & pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  8. Learn day5 迭代器\生成器\高阶函数\推导式\内置函数\模块(math.time)

    1.迭代器 # ### 迭代器 """能被next调用,并不断返回下一个值的对象""" """ 特征:迭代器会 ...

  9. Python装饰器、迭代器&生成器、re正则表达式、字符串格式化

    Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...

随机推荐

  1. 大数据学习[16]--使用scroll实现Elasticsearch数据遍历和深度分页[转]

    题目:使用scroll实现Elasticsearch数据遍历和深度分页 作者:星爷 出处: http://lxWei.github.io/posts/%E4%BD%BF%E7%94%A8scroll% ...

  2. 0804SHOW ENGINE INNODB STATUS

    转自http://blog.csdn.net/github_26672553/article/details/52931263 innodb存储引擎在show engine innodb status ...

  3. NYOJ 一笔画问题 欧拉路

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  4. [Cypress] Get started with Cypress

    Adding Cypress to a project is a simple npm install away. We won’t need any global dependencies beyo ...

  5. Java使用JAVE获取MP4播放时长

  6. Intel 的 MKL是可以用来训练的——官方的实验也提到了训练

    TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速 转载 2017年09月07日 16:34:58 标签: cpu / gpu   转载 ...

  7. [NOIP 2017] 奶酪

    [题目链接] http://uoj.ac/problem/332 [算法] 直接搜索即可 注意使用long long [代码] #include<bits/stdc++.h> using ...

  8. BZOJ 4259 FFT

    思路: 为什么好多字符串的题都可以用FFT啊.... 我们其实是要判断$\Sigma (a[i]-b[i])^2*a[i]*b[i]==0$ 那就把a串翻转过来 把 上式展开 大力做几遍FFT就好啦~ ...

  9. HBase编程 API入门系列之工具Bytes类(7)

    这是从程度开发层面来说,为了方便和提高开发人员. 这个工具Bytes类,有很多很多方法,帮助我们HBase编程开发人员,提高开发. 这里,我只赘述,很常用的! package zhouls.bigda ...

  10. Java基础2一基础语法

    1.标识符 定义:在Java中给类名.方法名.包名,参数名等命名时使用的字符序列即标识符 规则: 由字母.数字.下划线和$符组成 不能以数字开头 长度无限制 严格区分大小写 不能是java中的保留关键 ...