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


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-11-26 Per discussione Valerio Pachera
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

2020-11-22 Per discussione Daniele Zambelli
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

2020-11-21 Per discussione Gian Mario Tagliaretti
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

2020-11-20 Per discussione Valerio Pachera
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

2020-11-20 Per discussione Alessandro Dentella
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