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
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 dom 22 nov 2020 alle ore 18:47 Daniele Zambelli < daniele.zambe...@gmail.com> ha scritto: > > 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(.) > > Direi che questo approccio e' adatto a quello che sto cercando di fare. Grazie. ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Argomenti funzione posizionali e opzionali
Il giorno ven 20 nov 2020 alle ore 17:01 Valerio Pachera ha scritto: > [...] > def modify_signature(content, signature_id='', signature_name=''): > if signature_id or signature name: > #do stuff > pass > else: > print('Missing id o name') > sys.exit() 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(.) 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
Ciao Valerio > def modify_signature(content, signature_id='', signature_name=''): > if signature_id or signature name: > #do stuff > pass > else: > print('Missing id o name') > sys.exit() def modify_signature(content, signature_id=None, signature_name=None) if signature_id is None and signature_name is None: raise ValueError(.) Ciao -- Gian Mario Tagliaretti ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Argomenti funzione posizionali e opzionali
Il giorno ven 20 nov 2020 alle ore 15:53 Alessandro Dentella < sandro.dente...@gmail.com> ha scritto: > > > non mi è chiaro perché non metti content al primo posto:: > > Inizialmente l'avevo messo per ultimo e questo ha generato errore facendomi rivalutare anche gli altri due argomenti. Ora lo passo per primo. def modify_signature(content, signature_id='', signature_name=''): Espressa così posso richiamare la funzione con 1 solo argomento modify_signature(content) In reltà devo passare almeno uno dei due parametri. Inizio a pensare che l'unico modo sia gestire il controllo dentro la funzione. def modify_signature(content, signature_id='', signature_name=''): if signature_id or signature name: #do stuff pass else: print('Missing id o name') sys.exit() ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Argomenti funzione posizionali e opzionali
On Fri, Nov 20, 2020 at 03:14:53PM +0100, Valerio Pachera wrote: > Ciao a tutti, sto definendo una funziona a cui devo passare un valore per > id o per nome. > > Il mio approccio è stato questo > > def modify_firma(signature_id='', signature_name='', content): >if signatrue_id: > pass > elif signature_name: > pass > > Ci sono due problemi: il parametro content è posizionale e va messo prima. > Questo errore mi ha fatto pensare che devo passare almeno uno dei parametri > signature_id o signature_name. > Posso spostare la logica di controllo all'interno della funzione ma mi > chiedevo quale sia la via migliore per gestire questa situazione. > > L'altra idea è quella di mettere due parametri posizioni, il primo dei > quali sarà un dizionario. > > def modifiy_signature(reference, content): > if 'id' in reference: > pass > elif 'name' in reference: > pass non mi è chiaro perché non metti content al primo posto:: def modify_firma(content, signature_id='', signature_name=''): ... Mettere un dizionario mi pare inutilmente complesso in questo caso. sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] Argomenti funzione posizionali e opzionali
Ciao a tutti, sto definendo una funziona a cui devo passare un valore per id o per nome. Il mio approccio è stato questo def modify_firma(signature_id='', signature_name='', content): if signatrue_id: pass elif signature_name: pass Ci sono due problemi: il parametro content è posizionale e va messo prima. Questo errore mi ha fatto pensare che devo passare almeno uno dei parametri signature_id o signature_name. Posso spostare la logica di controllo all'interno della funzione ma mi chiedevo quale sia la via migliore per gestire questa situazione. L'altra idea è quella di mettere due parametri posizioni, il primo dei quali sarà un dizionario. def modifiy_signature(reference, content): if 'id' in reference: pass elif 'name' in reference: pass Cosa consigliate? ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python