[Python] Domanda "teorica"

Pietro Battiston battiston a mail.dm.unipi.it
Ven 1 Feb 2008 16:24:19 CET


Salve a tutti.

Ho una domanda un po' teorica, ma che in realtà viene da un problema
concreto che ho usando il modulo dateutil.

Se io ho una funzione con dei parametri facoltativi di cui conosco il
valore di default, sono certissimo che non passare alcun valore
equivalga a passare il valore di default?
Questo, è per una funzione in python (e per quel che ne so io), ovvio.
Ma una funzione di libreria scritta in C ha modo di "sapere" se un dato
parametro è stato passato oppure no?

In pratica, per la funzione dateutil.relativedelta.relativedelta, la cui
documentazione dice:

dateutil.relativedelta.relativedelta(self, dt1=None, dt2=None, years=0,
months=0, days=0, leapdays=0, weeks=0, hours=0, minutes=0, seconds=0,
microseconds=0, year=None, month=None, day=None, weekday=None,
yearday=None, nlyearday=None, hour=None, minute=None, second=None,
microsecond=None)

, ho la certezza più assoluta che le seguenti due invocazioni siano a
tutti gli effetti identiche?

dateutil.relativedelta.relativedelta(years=1)
dateutil.relativedelta.relativedelta(None, None, 1)

Per rispondere a tale domanda ho letto anche un po' della documentazione
su come estendere Python con il C, ma non posso dire di averne ricavata
una certezza proprio assoluta...


In alternativa, è possibile specificare in modo dinamico l'associazione
"nome del parametro-valore passato"? Ad esempio, se ho un valore "val"
da passare come parametro, esiste un modo di rendere il seguente
(stupido) codice senza scrivere due volte l'invocazione della funzione
relativedelta?

if val > 12:
    risultato=relativedelta(years=val)
else:
    risultato=relativedelta(months=val)

(ovviamente faccio entrambe le domande perché nel mio caso ho un po' di
"if" annidati e sono costretto a scrivere ben più di due volte tale
invocazione...)

grazie

Pietro


More information about the Python mailing list