1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【Python】詳解Python列表推導(dǎo)式|迭代器|生成器|匿名函數(shù)

        共 3802字,需瀏覽 8分鐘

         ·

        2022-06-28 01:32

        詳解python3匿名函數(shù)、推導(dǎo)式、迭代器和生成器用法。

        1、匿名函數(shù)(lambda)

        個(gè)人理解為一種簡單的定義函數(shù)的方式,不需要使用def關(guān)鍵字定義函數(shù)。語法:lambda 參數(shù):操作參數(shù)表達(dá)式。

        add = lambda x, y: x + y
        print(add(35))

        8

        list(map(lambda x, y: x + y, range(-22), range(15)))
        #傳入兩個(gè)iterable對(duì)象range(-2, 2), range(1, 5)

        [-1, 1, 3, 5]


        2、推導(dǎo)式(comprehensions)

        列表,字典和集合中都可以使用推導(dǎo)式。

        列表推導(dǎo)式

        一種簡單創(chuàng)建列表的方法。

        #if 語句置于for之后
        In [29]: [x for x in range(111if x % 2 == 0]
        #對(duì)于range(1, 11)中每個(gè)元素,能被2整除的輸出組成新列表
        Out[29]: [246810]

        #if 語句置于for之前可以使用else
        In [30]: [x if x % 2 == 0 else -x for x in range(111)]
        #對(duì)于range(1, 11)中每個(gè)元素,能被2整除的輸出原值,不能整除的取原值負(fù)數(shù)輸出,組成新列表
        Out[30]: [-12-34-56-78-910]

        字典推導(dǎo)式

        mcase = {'a'10'b'34'A'7'Z'3}
        {k:v for k,v in mcase.items()}

        {'a': 10, 'b': 34, 'A': 7, 'Z': 3}

        集合推導(dǎo)式

        {x**2 for x in [112]}#集合不允許重復(fù)

        {1, 4}


        3、迭代器(Iterator)

        可迭代對(duì)象(Iterable)

        python中的對(duì)象,只要具有方法__iter__和__getitem__就是可迭代對(duì)象,可迭代對(duì)象能提供迭代器。

        迭代器(Iterator)

        被定義了__next__方法的python對(duì)象。

        判斷對(duì)象是否是可迭代對(duì)象或迭代器

        from collections.abc import Iterable, Iterator
        def g():
            yield 1
            yield 2
            yield 3
        #是否為python可迭代對(duì)象判斷
        print('Iterable? [1, 2, 3]:', isinstance([123], Iterable))#isinstance()判斷一個(gè)對(duì)象是否是Iterable對(duì)象
        print('Iterable? \'abc\':', isinstance('abc', Iterable))
        print('Iterable? 123:', isinstance(123, Iterable))
        print('Iterable? g():', isinstance(g(), Iterable))

        #是否為python迭代器判斷
        print('Iterator? [1, 2, 3]:', isinstance([123], Iterator))#isinstance()判斷一個(gè)對(duì)象是否是Iterator對(duì)象
        print('Iterator? iter([1, 2, 3]):', isinstance(iter([123]), Iterator))
        print('Iterator? \'abc\':', isinstance('abc', Iterator))
        print('Iterator? 123:', isinstance(123, Iterator))
        print('Iterator? g():', isinstance(g(), Iterator))
        Iterable? [1, 2, 3]: True
        Iterable? 'abc': True
        Iterable? 123: False
        Iterable? g(): True
        Iterator? [1, 2, 3]: False
        Iterator? iter([1, 2, 3]): True
        Iterator? 'abc': False
        Iterator? 123: False
        Iterator? g(): True 

        迭代(Iteration)

        使用一個(gè)循環(huán)來遍歷某個(gè)python對(duì)象時(shí),這個(gè)過程就叫迭代。


        4、生成器(Generators)

        生成器也是一種迭代器,但是,只能對(duì)其迭代一次。這是因?yàn)樗鼈儾]有把所有的值存在內(nèi)存中(可節(jié)省大量內(nèi)存),而是邊循環(huán)邊生成值(生成器保存算法,可以計(jì)算下一個(gè)元素的值),創(chuàng)建生成器方法如下:

        ( )包圍列表推導(dǎo)式生成

        g = (x * x for x in range(10))#只迭代一次,只存儲(chǔ)算法,不會(huì)生成所有元素存儲(chǔ)于內(nèi)存。
        g

        <generator object <genexpr> at 0x000002B53772C4C0>

        for i in g:#for循環(huán)打印每個(gè)生成器中元素,在執(zhí)行輸出nothing(只迭代一次,只存儲(chǔ)算法)
            print(i)

        0149162536496481

        自定義函數(shù)中添加yield關(guān)鍵字構(gòu)建生成器

        推算算法很復(fù)雜時(shí)使用自定義函數(shù)。舉個(gè)例子,計(jì)算斐波那契數(shù)列的生成器。

        def fibon(n):
            a = b = 1
            for i in range(n):
                yield a#該函數(shù)為一個(gè)生成器
                a, b = b, a + b
         for x in fibon(1000000):
            print(x) #不用擔(dān)心它會(huì)使用大量資源      


        參考資料

        https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128
        Intermediate Python

        -END-

        往期精彩回顧




        瀏覽 50
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            中文字幕豆花 | 免费看男阳茎进女阳道播放 | 亚洲男人天 | japanese乱睡眠侵犯冢本 | 国产一级婬片A片色多多 | 男人插女人下面 | 91人人人 | 日韩无码1 | 太粗太长岳受不了了 | 国产精久久久久久久 |