"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Quais são os casos de uso e benefícios de aproveitar a sintaxe "yield from" no Python 3.3?

Quais são os casos de uso e benefícios de aproveitar a sintaxe "yield from" no Python 3.3?

Publicado em 2024-11-06
Navegar:862

What are the Use Cases and Benefits of Leveraging \

Na prática, aproveitando a sintaxe "yield from" no Python 3.3

A sintaxe "yield from", introduzida no Python 3.3, oferece um aprimoramento significativo nas capacidades de geradores e corrotinas. Ele estabelece uma conexão bidirecional entre um chamador e um subgerador, permitindo uma comunicação perfeita em ambas as direções.

Casos de uso para "rendimento de"

Leitura Dados de geradores:

  • Este caso de uso imita a funcionalidade de um loop for, mas com a conveniência adicional de propagar exceções. Por exemplo:
def reader():
    for i in range(4):
        yield '<< %s' % i

def reader_wrapper(g):
    yield from g

wrap = reader_wrapper(reader())
for i in wrap:
    print(i)

# Result:
# << 0
# << 1
# << 2
# << 3

Envio de dados para corrotinas:

  • Este cenário envolve a criação de uma corrotina que aceita dados enviados a ela e os grava em um local especificado, como um arquivo ou uma tomada. Por exemplo:
def writer():
    while True:
        w = (yield)
        print('>> ', w)

def writer_wrapper(coro):
    yield from coro

w = writer()
wrap = writer_wrapper(w)
wrap.send(None)  # Prime the coroutine
for i in range(4):
    wrap.send(i)

# Expected result:
# >>  0
# >>  1
# >>  2
# >>  3

Comparação com Micro-Threads

O rendimento da sintaxe compartilha algumas semelhanças com micro-threads, pois permite suspender e retomar corrotinas, criando uma alternativa leve para fios tradicionais. No entanto, as corrotinas são mais leves e têm menor sobrecarga de memória em comparação com microthreads. Eles também são executados no mesmo thread, evitando os problemas associados à troca de contexto em ambientes multithread.

Declaração de lançamento Este artigo foi reimpresso em: 1729681907 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3