函式 迭代器 生成器 列表解析 三元表示式

2022-03-17 08:27:25 字數 2597 閱讀 2308

可迭代物件: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__

()

print

(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__()

def

producer():

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

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:

print

( line)

b=tail_func('

b.txt')

c=grep_func(b,'

error')

for i in grep_func(c,'

404'

):

print(i)

編寫 tail -f a.txt |grep 'error' |grep '404'命令

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 輸出乙個生...