1
resposta

Função como um valor do parâmetro default do método json.dump

Na aula de "convertendo para json" do curso de IO de Python (penúltima aula, tempo 13min11), o instrutor utilizou o método dump do objeto json, sendo que o parâmetro "default" dessa função foi atribuído a uma função do módulo que ele estava criando.

Ele estava demonstrando como poderíamos converter um arquivo csv para uma estrutura de dict a partir do duck typing dict(), então descreveu uma estrutura semelhante a esta.

def example(contato, path):
       json.dump(contato, path, default = _method)

def _method(contato):
       return contato.__dict__()

O problema é que ele executou desta forma e não obteve erro, para minha supresa (mas não dele), pois imaginei que a ausência do parâmetro "contato" quando invocada a função _method(contato) iria resultar num erro missing parameter.

Neste caso, o que ocorre em python? Ou eu que estou pensando errado?

1 resposta

Olá Victor, tudo bem com você?

Peço desculpas pela demora em lhe responder.

O uso do método dump() permite converter objetos Python em objetos do tipo Json.

Um dos parâmetros que temos no método dump() é o 'default=' caso não seja informado será considerado como None. Durante a conversão de um objeto poderá ser necessário convertermos para um padrão específico, para isso podemos criar uma função que irá receber o objeto que estamos convertendo e retornar esse objeto convertido. Com o código apresentado temos:

def example(contato, path):
       json.dump(contato, path, default = _method)

def _method(contato):
       return contato.__dict__()

Para utilizarmos uma função como um valor para default essa função deverá receber um parâmetro, no nosso exemplo ela recebe o contato, esse parâmetro será passado para a função através do objeto selecionado pelo método dump(), esse método seleciona um objeto do arquivo para realiza a conversão do objeto, no exemplo é selecionado uma linha de nossa lista de contatos, essa linha por baixo dos panos é passada como o parâmetro contato para a função _method, esse contato é convertido em um dicionário e retorna para ser convertido para um objeto do tipo json.

Em resumo temos que o parâmetro da função é passado por “baixo dos panos” para pelo método dump(), quando esse seleciona e envia uma linha da nossa lista de contato como parâmetro.

Para aprimorar ainda mais o seu conhecimento sobre Json, recomendo a leitura do seguinte artigo, onde é abordado com detalhes a criação de funções para conversão e os tipos que podemos converter.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!