Re: [Python] Argomenti funzione posizionali e opzionali

2020-12-02 Per discussione Daniele Zambelli
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

2020-12-02 Per discussione Marco De Paoli
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