迭代器

可迭代对象

  • 拥有iter方法的对象就是可迭代对象
# 以下都是可迭代的对象

st = '123'.__iter__()
lis = [1, 2, 3].__iter__()
tup = (1, 2, 3).__iter__()
dic = {1: 'one', 2: 'two', 3: 'three'}.__iter__()
se = {1, 2, 3}.__iter__()
with open (r'123.txt', 'w', encoding='utf-8') as fw:
fw.__iter__()

迭代器对象

  • 拥有next方法的可迭代对象就是迭代器对象
# 依赖索引的数据类型迭代取值
lis = [1, 2, 3]
iter_lis = lis.__iter__() # 把可迭代对象变成迭代器对象
print(iter_lis.__next__())
print(iter_lis.__next__())
print(iter_lis.__next__())
1
2
3
# 不依赖索引的数据类型迭代取值
dic = {1: 'one', 2: 'two', 3: 'three'}
iter_dic = dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
1
2
3

__next__其实是在遍历可迭代对象的元素,一旦遍历完报错

hobby_list2 = ['run','read']
count = 0
while True:
print(hobby_list2[count])
count += 1
if count == len(hobby_list2):
break
run
read
  • for循环不依赖索引取值
  • 这一段代码如果用c写,就是for循环的原理
hobby_list = ['run', 'read']
hobby_list_iter = hobby_list.__iter__()
while True:
try:
print(hobby_list_iter.__next__())
except:
break
run
read
for i in hobby_list:  # for循环自动帮我们把变量变成了可迭代对象
print(i)
run
read
print(hobby_list)       # 一筐鸡蛋
print(hobby_list.__iter__()) # 相比较列表,它节省内存空间,老母鸡

总结

  1. 可迭代对象: 拥有iter方法的对象就是可迭代对象,可迭代对象不一定是迭代器对象,文件就是特例
  2. 迭代器对象: 拥有next方法的可迭代对象就是迭代器对象.迭代器对象一定是可迭代对象
  3. 文件既是可迭代对象,又是迭代器对象

三元表达式(三目表达式)

  • 只有else没有elif
x = 7
if x == 7:
print(x)
else:
print(x**2)
7
# 不推荐使用,写代码还是尽量整洁易懂
print(x) if x == 7 else print(x**2)
7

列表推导式

lis = []
for i in range(10):
lis.append(i)
print(lis)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 不推荐写
print([i for i in range(10)])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 及其不推荐写,不然会被当成傻逼
print([i*2 if i>5 else i for i in range(10)])
[0, 1, 2, 3, 4, 5, 12, 14, 16, 18]

字典生成式

dic = {i:i*2 for i in range(5)}
print(dic)
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
## 拉链函数
res = zip('abcd', [1,2,3,4])
dic = dict()
for k,v in res:
dic[k] = v
print(dic)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
print({k:v for k,v in zip('abcd', [1,2,3])})
{'a': 1, 'b': 2, 'c': 3}

day19-1 迭代器,三元表达式,列表推导式,字典生成式,的更多相关文章

  1. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  2. python 三元表达式 列表推导式,生成器表达式。递归,匿名函数, 内置函数

    三元表达式 三元表达式仅应用于: 1.条件成立返回一个值 2.条件不成立返回一个值 res = x if x>y else y print(res) name= input("姓名&g ...

  3. python基础-三元表达式/列表推导式/生成器表达式

    1.三元表达式:如果成立返回if前的内容,如果不成立返回else的内容 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' ...

  4. Python-02 生成器表达式,列表推导式

    列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表 ...

  5. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式

    闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...

  6. day13-迭代器、三元表达式、列表推导式、字典生成式、生成器与递归

    目录 迭代器 可迭代对象 迭代器对象 for循环原理 三元表达式(三目表达式) 列表推导式 字典生成式 zip()方法 生成器 生成器表达式 递归 递归的两个阶段 迭代器 迭代器即迭代的工具,迭代是一 ...

  7. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

    复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...

  8. day12(表达式,推导式,名称空间与作用域,函数的嵌套定义)

    一,复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascll进行比较 # print('a' > 'A') #True # print('ac' > 'ab' ...

  9. python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

随机推荐

  1. Centos7 单节点安装 FastDFS + FastDHT服务

    Centos7 单节点安装 FastDFS + FastDHT服务 1.安装gcc(编译时需要) FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果 ...

  2. jQuery样式操作

    获取样式和设置样式 <p class='myClass'  title='this is p'>this is p</p> 样式其实就是class属性所以设置和获取样式都能用a ...

  3. json与object

     json与object的区别:1.JSON是对象,但对象不一定是JSON2.对象的组成是由属性和属性值,也就是KEY->VALUE对组成,value可是是任意的数据类型,当value为一个函数 ...

  4. Linux设备驱动--块设备(二)之相关结构体(转)

    上回最后面介绍了相关数据结构,下面再详细介绍 块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区.如果该结构代表一个分区,则其成 ...

  5. 《你又怎么了我错了行了吧》【Alpha】Scrum meeting 4

    第四天 日期:2019/6/17 前言: 第4次会议在女生宿舍召开 对前面的系统改进有了方向,讨论了代码编写的分配问题 1.1 今日完成任务情况以及明天任务安排 姓名 当前阶段任务 下一阶段任务 刘 ...

  6. php输出网页源代码莫名奇妙的多了一堆方框,导致ajax验证失败.

    今天在用一个ajax验证用户名的功能,返回值报错,抓包看了下,多出来一堆点,源代码里显示方框和6个空行 这堆东西导致ajax判断返回值会错误,度娘了一下午(皇天不负游戏人啊),原来是一个坑爹的BOM头 ...

  7. tx:advice标签简介

    http://book.51cto.com/art/200909/149437.htm

  8. C# string bytes互转

    string str = "spike"; byte[] bytes = System.Text.Encoding.Default.GetBytes(str); foreach ( ...

  9. 深入浅出VGA和DVI接口

    由CrazyBingo修改…… 前言:目前显示器的主流接口是VGA.DVI以及HDMI,再加上一个比较少有的Displayport接口,一共可归为四类.相信不少消费者对这些接口认识并不多,特别是普通用 ...

  10. IT关键词,面试知识问与答

    二叉树遍历的三种方式? 遍历是指依次访问⼆叉树中的每个元素.有三种遍历⽅法,分别是前序遍历. 中序遍历和后序遍历.它们是按照访问根节点和⼦节点的先后顺序命名的. • 前序遍历:先访问根节点,然后访问左 ...