簡體   English   中英

是否有 Python 標准庫函數可以通過重復調用函數來創建生成器?

[英]Is there a Python standard library function to create a generator from repeatedly calling a functional?

我有一個方法想要重復調用以迭代,它會在完成后引發一個StopIteration (在這種情況下是一個 pyarrow.csv.CSVStreamingReader 循環遍歷大文件的實例)。 我可以在這樣的 for 循環中使用它:

def batch_generator():
    while True:
        try:
            yield reader.read_next_batch()
        except StopIteration:
            return

for batch in batch_generator():
    writer.write_table(batch)

它可以通過用戶定義的函數以通用方式完成:

def make_generator(f):
    def gen():
        while True:
            try:
                yield reader.read_next_batch()
            except StopIteration:
                return
    
    return gen()

for batch in make_generator(reader.read_next_batch):
    writer.write_table(batch)

...但我想知道這樣的事情是否可以使用標准庫函數或一些晦澀的語法?

我會假設帶有第二個參數的普通iter()函數應該做你想要的。 如:

for batch in iter(reader.read_next_batch, None):
    ...

關於如何迭代 CSVStreamingReader 的基本問題的答案是: CSVStreamingReader是可迭代的並且只做你想要的事情

reader = pyarrow.csv.open_csv(...)
for batch in reader:
    ...

一般來說,python 庫返回不是 python-iterable 的“iterable”東西真的很少見。 這始終是明智的第一件事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM