PYTHON-迭代器,xxx生成式
生活随笔
收集整理的這篇文章主要介紹了
PYTHON-迭代器,xxx生成式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 迭代器
1 什么是迭代器
#迭代器即迭代的工具,那什么是迭代呢?
#迭代是一個重復的過程,每次重復即一次迭代,并且每次迭代的結果都是下一次迭代的初始值
while True: #只是單純地重復,因而不是迭代
print('===>')
l=[1,2,3]
count=0
while count < len(l): #迭代
print(l[count])
count+=1
2 為何要用迭代器?
1.可以不依賴索引取值
2.同一時刻在內存中只有一個值,不會過多地占用內存
3 如何用迭代器?
可迭代的對象:但凡內置有__iter__方法的對象都是可迭代的對象,例如str,list,dict,tuple,set,文件
迭代器的對象:既內置有__iter__方法又內置有__next__方法的對象稱之為迭代器對象,例如 文件
可迭代對象.__iter__() - ------》迭代器對象
迭代器對象.__iter__() - ------》迭代器本身
迭代器對象.__next__() - ------》迭代器的下一個值
for i in obj:
pass
4 for準確地說應該是迭代器循環,for循環的原理如下:
1. 先調用in后面那個值的__iter__方法,得到迭代器對象
2. 執行迭代器.__next__()方法得到一個返回值,然后賦值給一個變量k,運行循環體代碼
3, 循環往復,直到迭代器取值完畢拋出異常然后捕捉異常自動結束循環
5 總結迭代器:
迭代器的優缺點
優點:
1.可以不依賴索引取值
2.同一時刻在內存中只有一個值,不會過多地占用內存(惰性計算,節省內存)
缺點:
1.不如按照索引或者key取值的方式靈活
2.無法預測迭代器所包含值的長度(只有在next完畢才知道到底有幾個值)
可迭代的對象=====》迭代器對象:調用可迭代對象內置的__iter__方法會有一個返回值,
該返回值就是對應的迭代器對象
dic={'x':1,'y':2,'z':3}
迭代器對象 = 調用可迭代的對象
iter_dic=dic.__iter__()
# print(iter_dic)
res1=iter_dic.__next__()
print(res1)
三個不同的迭代器
iter_dic1=dic.__iter__()
iter_dic2=dic.__iter__()
iter_dic3=dic.__iter__()
二 生成器
1 什么是生成器
#只要函數內部包含有yield關鍵字,那么函數名()的到的結果就是生成器,并且不會執行函數內部代碼
def func():
print('====>first')
yield 1
print('====>second')
yield 2
print('====>third')
yield 3
print('====>end')
g=func()
print(g) #<generator object func at 0x0000000002184360>
2 生成器就是迭代器
g.__iter__
g.__next__
#2、所以生成器就是迭代器,因此可以這么取值
res=next(g)
print(res)
3 yield關鍵字:只能用在函數內 **
在函數內但凡包含有yield關鍵字,再去執行函數,就不會立刻運行函數體代碼了
會得到一個返回值,該返回值成之為生成器對象,生成器本質就是迭代器
4 總結yield:
1. 提供一種自定義迭代器的解決方案
2. yield可用于返回值
yield VS return
相同點:都可以用于返回值
不同點:yield可以暫停函數,yield可以返回多次值,而return只能返回值一次值函數就立刻終止
三,三元表達式、列表推導式、生成器表達式
1 三元表達式
res = 條件成立情況下的返回值 if 條件 else 條件不成立情況下的返回值
name=input('姓名>>: ')
res='SB' if name == 'alex' else 'NB'
print(res)
2 列表生成式
[i
for i in range(10)]
[i for i in range(10) if i > 3]
3 生成器表達式 {}()
#1、把列表推導式的[]換成()就是生成器表達式
#2、示例:生一筐雞蛋變成給你一只老母雞,用的時候就下蛋,這也是生成器的特性
>>> chicken=('雞蛋%s' %i for i in range(5))
>>> chicken
<generator object <genexpr> at 0x10143f200>
>>> next(chicken)
'雞蛋0'
>>> list(chicken) #因chicken可迭代,因而可以轉成列表
['雞蛋1', '雞蛋2', '雞蛋3', '雞蛋4',]
#3、優點:省內存,一次只產生一個值在內存中
生成字典
{i:i for i in range(10) if i > 3}
生成集合
{i for i in range(10) if i > 3}
轉載于:https://www.cnblogs.com/du-jun/p/9767735.html
總結
以上是生活随笔為你收集整理的PYTHON-迭代器,xxx生成式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rgb风扇怎么接主板(RGBA转换16进
- 下一篇: 第五人格角色背后故事(《第五人格》官方网