python基礎拾遺004 迭代器,生成器

2021-08-25 14:35:35 字數 2702 閱讀 8965

迭代器

可迭代物件: 字串 元組 列表 字典 生成器和帶yield的生成器函式。

如何判讀物件是否可迭代:isinstance(物件,iterable)

如何判讀物件是否是迭代器:isinstance(物件,iterator)

如何生成可迭代物件的迭代器:iter(可迭代物件)

注意:可迭代物件不一定是迭代器,但是迭代器一定是可迭代物件。

from collections import iterable

from collections import iterator

a= "abc"

b=12

c=[11,23,32]

d=(12,21,21)

e=x= (x for x in range(1,20) if x%2==0)

#判斷物件是否可迭代

print(isinstance(a,iterable),isinstance(b,iterable),isinstance(c,iterable),

isinstance(d,iterable),isinstance(e,iterable),isinstance(x,iterable))

#判斷物件是否是迭代器,即被next()呼叫

print(isinstance(a,iterator),isinstance(b,iterator),isinstance(c,iterator),

isinstance(d,iterator),isinstance(e,iterator),isinstance(x,iterator))

#生成迭代器的方法 iter()

iter_a = iter(a)

print(next(iter_a))

print(next(iter_a))

print(next(iter_a))

print(next(iter_a))

生成器

使用場景:當需要建立大量資料的列表的時候,比如100000條記錄的列表,很顯然一次全部建立到記憶體當中是一件特別消耗記憶體的事情生成器就是通過封裝的演算法進行邊迴圈邊計算的機制。

兩種建立生成器的方法:

1.通列表解析語法,但是要把換成()即可。

>>> li=[x for x in range(1,20) if x%2==0]

>>> li

[2, 4, 6, 8, 10, 12, 14, 16, 18]

>>> type(li)

>>> gen=(x for x in range(1,100) if x%2==0)

>>> gen

at 0x7fb2f613f360>

>>> type(gen)

>>> next(gen)

2>>> next(gen)

4>>> next(gen)

6

2.通過帶yield的函式

呼叫帶yield的生成器函式,返回的是乙個生成器物件,此時函式並未執行。當呼叫next(生成器物件)的時候,函式開始執行,碰到yield語句函式暫停並返回yield物件後面的值。

>>> def genfunc():

... print('---function start---')

... for x in range(1,100):

... print('-----begin in for----')

... yield x

... print('-----get one x:----'+str(x))

... print('-----funtion end-----')

...

>>> genfun = genfunc()

>>> next(genfun)

---function start---

-----begin in for----

1>>> next(genfun)

-----get one x:----1

-----begin in for----

2>>> next(genfun)

-----get one x:----2

-----begin in for----

3>>> next(genfun)

-----get one x:----3

-----begin in for----

4

send函式呼叫帶yield的生成器函式,與next功能相似,同時給yield語句附乙個返回值。如下:

>>> def genfunc():

... for i in range(0,10):

... temp=yield i

... print('------'+str(temp)+'-----')

...

>>> gen = genfunc()

>>> gen.__next__()

0>>> gen.send('test')

------test-----

1>>> next(gen)

------none-----

2

NHibernate基礎拾遺

configuration 用於配置並啟動nhibernate,通過此例項來獲取物件關係對映檔案中的元資料 可以通過此例項動態配置nhibernate的屬性 此例項可以建立sessionfactory sessionfactory 乙個這個型別的例項對應乙個資料儲存源 可以建立session的例項 ...

NHibernate基礎拾遺

configuration 用於配置並啟動nhibernate,通過此例項來獲取物件關係對映檔案中的元資料 可以通過此例項動態配置nhibernate的屬性 此例項可以建立sessionfactory sessionfactory 乙個這個型別的例項對應乙個資料儲存源 可以建立session的例項 ...

javascript基礎拾遺 二

1.物件定義 定義屬性 var language console.log language.name console.log language.score 定義方法 var language console.log language.name console.log language.score c...