nome = Emma idade = 25 cidade = Formosa idade = 178 estado = GO Assinale a opção que corresponde ao código em Python que produzirá o resultado precedente.
- A)def apresenta_dado(*a): for i, j in a.items(): print("{} = {}".format(i,j)) apresenta_dado(nome="Emma", idade=25) apresenta_dado(cidade="Formosa", idade=178, estado="GO")
Errada, porque *a recebe argumentos posicionais em tupla, nao um dicionario com items().
- B)def apresenta_dado(**a): for i, j in a.items(): print("{} = {}".format(i,j)) apresenta_dado(nome="Emma", idade=25) apresenta_dado(cidade="Formosa", idade=178, estado="GO")
Certa, porque **a recebe os argumentos nomeados em um dicionario e permite iterar com items().
- C)def apresenta_dado(argc, *argv): for i in range(0, argc): print (i, argv[i]) apresenta_dado(nome="Emma", idade=25) apresenta_dado(cidade="Formosa", idade=178, estado="GO")
Errada, porque a assinatura nao aceita chamadas com parametros nomeados desse jeito e o acesso via argv nao corresponde ao que foi passado.
- D)def apresenta_dado(nome="", idade=0, cidade="", estado=""): print ("nome:",nome) print ("idade:",idade) print ("cidade:",cidade) print ("estado:",estado) apresenta_dado(nome="Emma", idade=25) apresenta_dado(cidade="Formosa", idade=178, estado="GO")
Errada, porque a funcao imprime sempre os mesmos quatro campos, mas a saida dada depende de duas chamadas e de exibir apenas os argumentos informados em cada uma.
- E)def apresenta_dado(int argc, char *argv[]): for (int i = 0; i < argc; i++): print("%s\n", i, argv[i]) apresenta_dado(nome="Emma", idade=25) apresenta_dado(cidade="Formosa", idade=178, estado="GO")
Errada, porque a sintaxe mistura Python com C e nao eh codigo valido em Python.
Gabarito: B
Em Python, quando voce quer receber uma quantidade variavel de argumentos nomeados, o recurso certo eh o dicionario de argumentos por palavra-chave, escrito com **kwargs. Ele junta os pares chave=valor em um objeto do tipo dict, o que permite percorrer nomes e valores com a funcao items(). Nesta questao, o codigo precisa imprimir algo como "nome = Emma" e "idade = 25", e depois outra chamada com "cidade = Formosa", "idade = 178" e "estado = GO". Isso combina exatamente com uma funcao definida com **a, porque a recebe os argumentos nomeados e permite usar for i, j in a.items(): para exibir cada par. A alternativa B esta correta por isso: def apresenta_dado(**a) captura os parametros nomeados e o laço percorre o dicionario de argumentos. Ja a chamada apresenta_dado(nome="Emma", idade=25) funciona normalmente, assim como a segunda chamada com tres argumentos nomeados. Como regra pratica, lembre: *args recebe argumentos posicionais em forma de tupla, enquanto **kwargs recebe argumentos nomeados em forma de dicionario. Essa diferenca cai bastante em prova, porque a banca adora trocar uma letrinha e esperar que voce escorregue.