2010-08-03 5 views
0

J'ai une méthode:Obtenez la date actuelle comme argument par défaut pour une méthode

def do_something(year=?, month=?): 
    pass 

Je veux que les arguments year et month d'être facultative, mais je veux leur défaut égal l'année en cours et mois . J'ai réfléchi à la définition de deux variables juste avant la déclaration de la méthode, mais le processus qui en fait partie peut durer plusieurs mois. Il doit être dynamique.

On dirait que ça ne devrait pas être difficile mais je suis en train de faire un bloc mental aujourd'hui, donc comment le feriez-vous?

Répondre

8

L'approche idiomatiques ici serait d'attribuer None comme la valeur par défaut, puis réattribuer dans la méthode si les valeurs sont encore None:

def do_something(year=None, month=None): 
    if year is None: 
     year = datetime.date.today().year 
    if month is None: 
     month = datetime.date.today().month 

    # do stuff... 

Vous pourriez penser que vous pouvez faire def do_something(year=datetime.date.today().year), mais mettrait en cache la valeur de sorte que year serait le même pour tous les appels à do_something.

Pour démontrer ce concept:

>>> def foo(x=time.time()): print x 
... 
>>> foo() 
1280853111.26 
>>> # wait a second at the prompt 
>>> foo() 
1280853111.26 
+0

merci pour le heads up, qui est tout à fait correct. –

+0

«si non année» et «si pas mois» est plus pythonique que «n'est aucun». Sinon bon. –

+0

@Zonda: Peut-être, mais cela invaliderait également les valeurs de zéro. Zéro pourrait être une valeur étrange pour le mois, mais c'est plausible pour l'année, sans plus de contexte sur les circonstances exactes du PO. –

Questions connexes