Re: [Python] Argomenti funzione posizionali e opzionali
Il giorno dom 22 nov 2020 alle ore 18:47 Daniele Zambelli ha scritto: > [...] Avevo proposto una soluzione basata su una parola chiave passata come parametro: > Dato che il contenuto e la signature sono necessari per il > funzionamento della funzione e che i due tipi di signature sono > entrambi stringhe, io avrei fatto così: > > def modify_signature(content, signature, signature_type='id'): > if signature_type == 'id': > fa qualcosa > elif signature_type == 'name': > fa qualcosaltro > else: > raise ValueError(.) Mi erano rimasti dei dubbi... oggi leggendo le note alla versione 3.9 ho trovato una frase che mi ha confermato la fondatezza dei dubbi: "This would avoid adding a new method, but for different behavior, it's better to have two different methods than one method with a keyword argument that selects the behavior." Quindi la soluzione che proporrei oggi sarebbe: def modify_signature_id(content, signature): < fa qualcosa> def modify_signature_name(content, signature): Tanto chi chiama la funzione sa se se ha a disposizione un id o un name. Ciao -- Daniele www.fugamatematica.blogspot.com giusto! nel verso forse è perché non guardiamo le cose Quando non ci capiamo, ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Argomenti funzione posizionali e opzionali
Il giorno mer 2 dic 2020 alle ore 14:50 Daniele Zambelli < daniele.zambe...@gmail.com> ha scritto: > Quindi la soluzione che proporrei oggi sarebbe: > > def modify_signature_id(content, signature): > < fa qualcosa> > > def modify_signature_name(content, signature): > > > Tanto chi chiama la funzione sa se se ha a disposizione un id o un name. > Sono daccordo ... volendo poi si potrebbe anche valutare una cosa del genere: def modify_signature_id(content, signature): print("modify_signature_id", signature) def modify_signature_name(content, signature): print("modify_signature_name", signature) # utilizzo base modify_signature_id("cc", "sample_id") modify_signature_name("cc", "sample_name") # utilizzo parametrico modify_signature = lambda s_type: globals()["modify_signature_{}".format(s_type)] modify_signature("id")("cc", "sample_id") modify_signature("name")("cc", "sample_name") # utilizzo parametrico con f-strings modify_signature = lambda s_type: globals()[f"modify_signature_{s_type}"] modify_signature("id")("cc", "sample_id") modify_signature("name")("cc", "sample_name") bye, Marco ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python