2010-08-03 66 views
0

我有一个方法:获取当前日期作为缺省参数的方法

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

我想yearmonth参数是可选的,但我想他们的默认等于当前年份和月份。我曾想过在方法声明之前设置两个变量,但这是其中一部分的过程可以运行数月。它需要是动态的。

似乎它不应该很难,但我今天有一个心理障碍,所以你会怎么做呢?

回答

8

的惯用方法在这里将分配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 
+0

感谢抬起头,这是完全正确的。 – 2010-08-03 16:35:40

+0

'如果不是一年'和'如果不是一个月'比'没有'更加pythonic。否则很好。 – 2010-08-03 18:07:12

+0

@ Zonda:也许,但这也会使零值无效。对于这个月零可能是一个奇怪的价值,但这一年似乎是合理的,没有任何关于OP的确切情况的背景。 – 2010-08-03 21:25:21