Ho una funzione che accetta una stringa o un dizionario come argomento. Cioè, può essere chiamato come:
lookup_person({name: "John Smith", age: 57})
o
lookup_person("John Smith")
La mia prima inclinazione è usare type
o isinstance
per distinguere il tipo dell'argomento, ma ho visto un sacco di inchiostro rovesciato sopra se e quando il rilevamento del tipo rigido è appropriato. La saggezza prevalente che ho letto suggerisce che dovrei provare se il mio oggetto implementa un'interfaccia, ma testare una stringa particolare o i metodi del dizionario sembrano molto meno sicuri rispetto al semplice test se il tipo dell'oggetto è una stringa o un dizionario.
È possibile utilizzare la digitazione anatra qui, ed è appropriato farlo? O ho un problema più grande, e il mio approccio qui in qualche modo fondamentalmente non è Pythonic?
EDIT: per chiarire, passare un dizionario è l'uso "tipico". Il passaggio in una stringa è semplicemente un'abbreviazione API per un dizionario a voce singola con name
, cioè lookup_person({name:"John Smith"})
.