SóProvas


ID
932974
Banca
CESPE / CEBRASPE
Órgão
SERPRO
Ano
2010
Provas
Disciplina
Programação
Assuntos

Julgue os itens que se seguem, a respeito da linguagem Python, versão 3.1.

Uma função ou método que usa a instrução yield é denominada função geradora, a qual, quando chamada, retoma um objeto Integer que pode ser usado para executar o corpo da função no número de vezes retomado.

Alternativas
Comentários
  • - Para compreender de fato funcionamento YIELD, precisa-se possuir conceitos vizinhos como iteradores (iterators), geradores (generators) e expressões geradoras (generator expressions).

     

    - O yield só pode ser usado dentro de uma função.

    _________________________________

       >>> yield

                   File "", line 1

          SyntaxError: 'yield' outside function

    __________________________________

    Dentro de uma função ele funciona mais ou menos como um return, com a diferença que ele retorna um generator.

     

    (fonte: http://www.devfuria.com.br/python/yield/)

  • Yield no Python é usado sempre que você precisa definir uma função de gerador de algo. Você não pode usar yield fora de um generator function. Quando você usa a instrução yield dentro de uma função, ela se transforma em uma função geradora. ... O yield retém o estado da função onde ela é pausada (ao retornar o value ).

  • Errado, Uma função ou método que usa a instrução yield é denominada função geradora, a qual, quando chamada, retoma um objeto Integer (errado!), o yield cria um generator, ou seja, cria uma lista de dados que vão sendo consumidos sob demanda.

  • O yield cria um generator, ou seja, cria uma lista de dados que vão sendo consumidos sob demanda.

    Resposta: Errado

  • DO SITE STACK OVERFLOW:

    PERGUNTA: Há já algum tempo que tenho escrito alguns scripts básicos com o Python, em alguns tutoriais às vezes é-me apresentado o , que normalmente surge em estruturas de repetição comumente. Para que serve? E como usar?

    RESPOSTA: O Python tem especificidades próprias mas essencialmente em todas linguagens funcionam igual. Ele cria um generator, ou seja, cria uma lista de dados que vão sendo consumidos sob demanda. Em geral é usado para dar melhores abstrações ao código. Tudo que se faz com ele, dá para fazer sem ele de forma muito semelhante, mas expondo o mecanismo de geração dos dados. Ele retorna um valor mantendo o estado de onde parou. Quando executa de novo ele continua de onde parou. Ele controla o estado de um enumerador entre execuções da função.

    def impar(elems):

       for i in elems:

           if i % 2:

               yield i

     

    for x in impar(range(1000)):

    Este código imprimirá todos os ímpares de 0 à 1000. Ele vai chamar o método 500 vezes, cada vez trará um número ímpar. O compilador/biblioteca montará a estruturá interna para saber em que número ele está em cada chamada.

    Claro que tem uma variável escondida que sobrevive além do ambiente interno da função. Então esse  não começa de novo em cada chamada da função. Note que você pode chamar a função  sem saber como ela faz a seleção internamente. Este exemplo é simples e óbvio, mas pense em coisas mais complexas. Você abstrai melhor. Você diz que vai chamar um método que filtra os ímpares para você. Não interessa como. O que você vai fazer com a informação gerada é problema seu. A função com o  tem responsabilidade única de gerar a informação.

    Outro exemplo:

    def numeros():

       yield 1

       yield 2

       yield 3

     

    print numeros()

    print numeros()

    print numeros()

    Isso imprimirá 1, 2 e 3.

  • Foi escrito muita coisa e no final nada foi dito!

    yield só pode ser usado dentro de uma função. não pode ser usado dentro de um .

    Uma função ou método que usa a instrução yield é denominada função geradora...

  • Pra quem não entende a diferença entre o yield e o return, aqui vai:

    • def letras():
    •   return 'A'
    •   return 'B'
    •   return 'C'
    • for letra in letras():
    •   print (letra) #Irá imprimir "A", porque o return não tem uma "memória", sempre vai imprimir o primeiro.

    Agora, se usarmos o yield:

    • def letras():
    •   yield 'A'
    •   yield 'B'
    •   yield 'C'
    • for letra in letras():
    •   print (letra) #Irá imprimir todas as letras, uma em cada linha. É como se ele soubesse onde parou da última vez que imprimiu.