Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
¿Retorno o rendimiento de una función que llama a un generador?

Tengo un generador de generator y también un método de conveniencia para generate_all .

 def generator(some_list): for i in some_list: yield do_something(i) def generate_all(): some_list = get_the_list() return generator(some_list) # <-- Is this supposed to be return or yield?

¿Debería generate_all return o yield ? Quiero que los usuarios de ambos métodos lo usen de la misma manera, es decir

 for x in generate_all()

debe ser igual a

 some_list = get_the_list() for x in generate(some_list)
over 4 years ago · Santiago Trujillo
4 answers
Answer question

0

Probablemente estés buscando Delegación de Generador (PEP380)

Para iteradores simples, yield from iterable es esencialmente solo una forma abreviada de for item in iterable: yield item

 def generator(iterable): for i in iterable: yield do_something(i) def generate_all(): yield from generator(get_the_list())

Es bastante conciso y también tiene una serie de otras ventajas, como poder encadenar iterables arbitrarios/diferentes.

over 4 years ago · Santiago Trujillo Report

0

return generator(list) hace lo que quieres. Pero ten en cuenta que

 yield from generator(list)

sería equivalente, pero con la oportunidad de generar más valores después de que se agote el generator . Por ejemplo:

 def generator_all_and_then_some(): list = get_the_list() yield from generator(list) yield "one last thing"
over 4 years ago · Santiago Trujillo Report

0

Las siguientes dos declaraciones parecerán ser funcionalmente equivalentes en este caso particular:

 return generator(list)

y

 yield from generator(list)

El último es aproximadamente el mismo que

 for i in generator(list): yield i

La declaración de return devuelve el generador que está buscando. Una instrucción yield from o yield convierte toda su función en algo que devuelve un generador, que pasa por el que está buscando.

Desde el punto de vista del usuario, no hay diferencia. Sin embargo, internamente, el return es posiblemente más eficiente ya que no envuelve generator(list) en un generador de paso superfluo. Si planea realizar algún procesamiento en los elementos del generador envuelto, use alguna forma de yield , por supuesto.

over 4 years ago · Santiago Trujillo Report

0

Lo return .

yield ing* haría que generate_all() se evaluara como un generador en sí mismo, y llamar a next a ese generador externo devolvería el generador interno devuelto por la primera función, que no es lo que querrías.

* Sin incluir yield from

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!