第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Python:過(guò)濾可迭代類

Python:過(guò)濾可迭代類

呼喚遠(yuǎn)方 2022-12-06 15:29:13
是否有一個(gè)Iterable對(duì)象可以持有的鉤子/dunder,以便內(nèi)置filter函數(shù)可以擴(kuò)展到Iterable類(而不僅僅是實(shí)例)?當(dāng)然也可以自己寫(xiě)一個(gè)自定義filter_iter函數(shù),比如:def filter_iter(filt_func: callable, collection_cls: type):    name = 'Filtered' + collection_cls.__name__  # would this automatic scheme lead to namespace conflicts?    wrapped_cls = type(name, (collection_cls,), {'_filt_func': staticmethod(filt_func)})    def __iter__(self):        yield from filter(self._filt_func, super(wrapped_cls, self).__iter__())    wrapped_cls.__iter__ = __iter__    return wrapped_cls這會(huì)產(chǎn)生預(yù)期的效果。例如,from collections import Collection, Iterableclass Chunker(Iterable):    def __init__(self, source: Iterable, chk_size: int=2):        self._source = source        self._chk_size = chk_size    def __iter__(self):        yield from zip(*([iter(self._source)] * self._chk_size))chunker = Chunker(range(12), 2)assert list(chunker) == [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9), (10, 11)]FilteredChunker = filter_iter(lambda x: sum(x) % 3 == 0, Chunker)filtered_chunker = FilteredChunker(range(12))assert list(filtered_chunker) == [(4, 5), (10, 11)]但是,就像有一個(gè)__iter__鉤子可以確定如何迭代一個(gè)對(duì)象(例如,list在對(duì)象上調(diào)用時(shí)應(yīng)該如何表現(xiàn)),是否有一種__filter__鉤子可以確定filter在該對(duì)象上調(diào)用時(shí)應(yīng)該如何表現(xiàn)?如果不是,關(guān)于過(guò)濾可迭代對(duì)象的最佳實(shí)踐或標(biāo)準(zhǔn)是什么?
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

與list(__iter__例如)不同,沒(méi)有這樣的掛鉤filter。后者只是迭代器協(xié)議的一個(gè)應(yīng)用,而不是一個(gè)單獨(dú)的協(xié)議本身。


為了不讓您空手而歸,這是 filtered_iter您提出的一個(gè)更簡(jiǎn)潔的版本,它動(dòng)態(tài)地對(duì)給定類進(jìn)行子類化,將其__iter__方法與filter.


def filter_iter(p, cls):

    class _(cls):

        def __iter__(self):

            yield from filter(p, super().__iter__())

    return _


查看完整回答
反對(duì) 回復(fù) 2022-12-06
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)