我有一个方法:
def do_something(year=?, month=?):
pass
我希望year
和month
参数是可选的,但我希望它们的默认值等于当前年份和月份。我已经考虑过在方法声明之前设置两个变量,但是这个过程可以运行几个月。它需要是动态的。
似乎不应该很难但我今天有心理障碍所以你会怎么做?
答案 0 :(得分: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