当前位置:
首页 > Python基础教程 >
-
迭代器,三元表达式,字典生成式,生成器
迭代器
可迭代对象
python中一切皆对象
凡是有__iter__
方法的对象,都是可迭代对象
可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。
lt = [1,2,3,4]
print(lt.__iter__())
# 打印结果:
<list_iterator object at 0x00000211EB7565C0>
迭代器对象
含有__iter__
和__next__
方法的对象就是迭代器对象
为什么要有迭代器对象:提供了 不依赖索引取值的手段
dic = {'a':1, 'b':2, 'c':3}
dic_iter = dic.__iter__()
print(dic_iter.__next__())
print(dic_iter.__next__())
print(dic_iter.__next__())
如果值取干净了,就会报错StopIteration
总结:
迭代器对象:执行可迭代对象的__iter__
方法,拿到的返回值就是迭代器对象。
特点:
-
内置
__next__
方法,执行该方法会拿到迭代器对象中的一个值 -
内置有
__iter__
方法,执行该方法会拿到迭代器本身 - 文件本身就是迭代器对象。
缺点:
- 取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
- 无法使用len()方法获取长度
for循环原理
for循环称为迭代器循环,in后面必须是可迭代对象
```python
dic = {'a':1, 'b':2, 'c':3}
dic_iter = dic.__iter__()
while True:
try:
print(dic_iter.__next__())
except Exception:
break
```
总结:
-
含有
__iter__
方法的就是可迭代对象,除了数字类型,其它都是可迭代对象。可迭代对象使用__iter__
就会变成迭代器。 -
含有
__next__
方法的就是迭代器对象,只有文件是迭代器对象。迭代器使用__iter__
依然是迭代器
三元表达式
x = 10
y = 20
if x > y:
print(x)
else:
print(y)
print(x if x > y else y) # 三元表达式
列表推导式
lt = [i for i in range(10)]
print(lt)
字典生成式
dic = {i:i for i in range(10)}
print(dic)
zip()方法
res = zip([1,2,3],['a','b','c']) # res是一个迭代器,__next__返回元组
print(res.__next__())
print(res.__next__())
print(res.__next__())
# 打印结果:
(1, 'a')
(2, 'b')
(3, 'c')
利用两个列表快速生成一个字典
lt1 = ['a', 'b', 'c']
lt2 = [1, 2, 3]
res = zip(lt1, lt2)
dic = {k: v for k, v in res}
print(dic)
# 打印结果:
{'a': 1, 'b': 2, 'c': 3}
生成器
生成器:
- 含有yield关键字的函数叫生成器。
- 生成器本质上就是一个自定义的迭代器
def f():
yield 1 # 一个yield相当于一个next,可以暂停函数
yield 2
f = f()
print(f.__next__())
print(f.__next__())
生成器表达式
f = (i for i in range(10))
for i in f:
print(i)
生成器表达式节省内存,能一个个取出值---> 相当于老母鸡下蛋
列表推导式,一下子就取出----> 相当于一筐鸡蛋
yield与return的比较:
- yield可以暂停函数,通过next取值
- return可以终止函数,通过调用函数拿到值
递归
函数f内部直接或间接调用函数f本身
def f(): # 死递归
a = 1
print(a)
f()
f()
每一次递归,不会结束函数,并且每一次递归都会开辟内存空间,如果一直开辟内存空间,内存就炸掉了,最多递归1000次。
真正的递归必须要有退出条件
count = 0
def func():
global count
count += 1
print(count)
if count == 100:
return
func()
func()
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式