Получить текущую дату в качестве аргумента по умолчанию для метода - PullRequest
0 голосов
/ 03 августа 2010

У меня есть метод:

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

Я хочу, чтобы аргументы year и month были необязательными, но я хочу, чтобы их значения по умолчанию равнялись текущему году и месяцу.Я думал об установке двух переменных непосредственно перед объявлением метода, но процесс, частью которого он является, может выполняться месяцами.Он должен быть динамичным.

Похоже, это не должно быть сложно, но у меня сегодня ментальный блок, поэтому как бы вы это сделали?

1 Ответ

8 голосов
/ 03 августа 2010

Идиоматический подход здесь заключается в назначении None в качестве значения по умолчанию, а затем переназначении в методе, если значения все еще 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...

Вы можете подумать, что можете сделать def do_something(year=datetime.date.today().year), но это кеширует значение, так что year будет одинаковым во всех вызовах do_something.

Чтобы продемонстрировать эту концепцию:

>>> def foo(x=time.time()): print x
...
>>> foo()
1280853111.26
>>> # wait a second at the prompt
>>> foo()
1280853111.26
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...