可迭代物件:obj.__iter__
迭代器:iter1=obj.__iter()
1iter1.__next__
2iter2.__next__
迭代器:
優點:不依賴索引
惰性計算,節省記憶體
缺點:不如按照索引的取值方便
一次性,只能往後取,不能回退
迭代器的應用:
判斷可是否是可迭代物件和迭代器
from collections import iterable, iterator # 匯入模組功能
isinstance(a, iterable) 檢視a是否為可迭代物件
isinstance(a, iterator) 檢視a是否為可迭代器
迭代器:
d=obj=d.__iter__
()
while 1: #
while 迭代
try:
i=obj.__next__
()
(i)
except
stopiteration:
break
for i in d: #
for 迭代
print(i)
字串,列表元組,字典,集合,檔案都是可迭代的,只有檔案是迭代器生成器:
生成器函式:函式體內包含有yield關鍵字,該函式的執行結果是生成器函式
生成器函式執行的得到生成器
生成器就是迭代器
yield的功能:
(包含yield的函式)
yield 可以進行返回值操作,如果後面沒有yield攔住,作為返回值,會報錯 stopiteration
def foo():
print(111)
yield 1 # 如果列印下面.__next__的結果的話,會列印這個返回值
print(222)
f = foo() # 執行這一句的時候,系統不會執行 foo(),而是直接生成乙個迭代器f
f.__next__()
f.__next__()
defproducer():
print('
first------>')
yield 1
print('
second------>')
yield 2
print('
third------->')
yield 3
for i in
producer():
print(i)
def列表解析countdown(n):
print('
start countdown')
while n>0:
yield
n n-=1
print('
stop countdown')
for i in countdown(9):
print(i)
# 要求:將 s = 'hello' 放到新列表中
[i.upper() for i in s] # for 迴圈得到i,將i作為列表的元素
# 要求:判斷列表 l = [1,31,73,84,57]中的元素, 如果大於30,就將i加入新列表
res = [i for i in l if i > 30]
加入字典的值(i) 迴圈( for i in l ) 條件( if i > 30 )
三元表示式
res = 2 if 2 > 3 else 3 # 正確時執行 判斷條件 錯誤時執行
print(res)
結果:3 # 執行結果為 3
學習例項:
import編寫 tail -f a.txt |grep 'error' |grep '404'命令time
def tail_func(filename,encoding='
utf-8'):
with open(filename,'r
',encoding=encoding) as f:
f.seek(0,2)
while 1:
line=f.readline()
ifline:
yield
line
else
: time.sleep(0.5)
defgrep_func(lines,pattern):
for line in
lines:
if pattern in
line:
( line)
b=tail_func('
b.txt')
c=grep_func(b,'
error')
for i in grep_func(c,'
404'
):
print(i)
190329迭代器 生成器 三元運算 列表解析
可迭代物件 遵循迭代器協議,即可迭代物件,可以被for迴圈的就是可迭代物件 l iter l l.iter 將列表轉換為迭代器 print iter l.next print next iter l 1 生成器函式def f for i in range 10 yield i t f print t...
生成器 三元運算 列表解析
一 什麼是生成器 可以理解為是一種資料型別,這種資料型別自動實現了迭代器協議 其他資料型別需要呼叫自身內建的 iter 方法 所以生成器是可迭代物件。二 生成器分類及在python中的表現形式 1 生成器函式 常規函式定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返...
三元運算,生成器表示式,列表解析
生成器是可迭代物件,可以理解成為一種資料型別,這種資料型別自動實現了迭代器協議 其他的資料型別需要呼叫自己內建的 iter 方法 在python中有兩種表現形式,一種是以函式的形式yield 二是生成器表示式 yield 函式 def test yield 1g test print g 輸出乙個生...