久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

簡談list相關的生成器表達式

 千鋒IT培訓 2019-09-19


首先看看一個列表的類型,,我們通過isinstance() 函數(shù)來判斷一個列表的類型,通過實驗1可以看出其只是一個可迭代的對象,,而不是一個迭代器??梢酝ㄟ^iter() 函數(shù)返回一個其對應的迭代器,。

“生成器表達式(簡稱生成式)”實際上可以理解為“迭代”和“列表解析”的組合,它使用小括號來表示,。在實驗2中,,該生成式既是一個迭代器,又是一個可迭代對象,。但是這個時候生成式是不能直接以列表形式輸出打印的,。

from typing import Iterable, Iterator

if __name__ == "__main__":

    print("====== 案例1 ==========")

    lst = [1, 4, 8]

    print(isinstance(lst, Iterable))   # 是否可迭代 True

    print(isinstance(lst, Iterator))   # 是否迭代器 False

    print(isinstance(iter(lst), Iterator))  # 轉(zhuǎn)成迭代器 True

    print("====== 案例2 ==========")

    lst2 = (x * x for x in range(1, 4))

    print(isinstance(lst2, Iterable))  # 是否可迭代 True

    print(isinstance(lst2, Iterator))  # 是否迭代器 True

    print(lst2)

輸出:

====== 案例1 ==========

True

False

True

====== 案例2 ==========

True

True

<generator object <genexpr> at 0x00000000029DFB88>

在列表中,我們可以通過 range() 函數(shù)自動生成一個整數(shù)列表,也可以在生成新列表的同時,,對原列表元素再依次進行其它的處理,。在沒有for進行循環(huán)迭代的時候,,我們需要通過list() 函數(shù)將其轉(zhuǎn)換為一個可以輸出的列表。

if __name__ == "__main__":

    lst = list(range(5))

    print(lst)

    lst = [x+1 for x in [5, 5, 5]]

    print(lst)

    lst = [x * x for x in list(range(1, 8)) if x % 2 == 0]

    print(lst)

    lst = [x * y for x in range(1, 3) for y in range(10, 15)]

    print(lst)

輸出:    

[0, 1, 2, 3, 4]

[6, 6, 6]

[4, 16, 36]

[10, 11, 12, 13, 14, 20, 22, 24, 26, 28]

生成器是一個“機器”,,用來生產(chǎn)零件,,每調(diào)用一次 next() 函數(shù)的時候就生產(chǎn)一個零件,所以,,調(diào)用生成器提前不知道有多少個零件,,只能通過 next() 方法進行不停調(diào)用,直至拋出StopIteration異常為止,。調(diào)用生成器的時候,,碰到 yield 語句就停止本次生產(chǎn)。

from typing import Iterable, Iterator

if __name__ == "__main__":

    print("====== 案例1 ==========")

    # 用小括號表示的是生成器

    lst = (x * x for x in range(5))

    # 生成器返回的是一個對象,,而不是列表

    print(type(lst))

    # 生成器生成的對象,,需要使用迭代(for)的方法查看

    for x in lst:

        print(x)

    print("====== 案例2 ==========")

    # 調(diào)用時執(zhí)行到 yield 即停止

    def add(x, y, num):

        for v in range(1, num):

            t = (x + y) * v

            # yield 有return 的作用

            yield t

    m = add(1, 1, 5)

    # 是否“可迭代對象”

    print(isinstance(m, Iterable))

    # 是否是一個“迭代器”

    print(isinstance(m, Iterator))

    # 執(zhí)行到第一次 yield 即停止

    print(next(m))

    # 從第二次 yield 開始執(zhí)行直到結(jié)束

    for x in m:

        print(x)

輸出:

====== 案例1 ==========

<class 'generator'>

0

1

4

9

16

====== 案例2 ==========

True

True

2

4

6

8

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多