
hi , 如题, 不知道这是不是 django 的特性?直接用 python 试了没这效果。
import datetime def test(a, b=datetime.datetime.now()): print a print "b %s" %b print "c %s" %datetime.datetime.now() test(2) 输出结果 b 的值不会改变, c 的正常。
1 111111111111 2017-02-06 11:55:50 +08:00 In [1]: import datetime In [2]: def test(a, b=datetime.datetime.now()): ...: print a ...: print "b %s" %b ...: print "c %s" %datetime.datetime.now() ...: In [3]: import time In [4]: for i in range(6): ...: time.sleep( 2) ...: test(i) ...: 0 b 2017-02-06 11:53:42.707000 c 2017-02-06 11:55:00.035000 1 b 2017-02-06 11:53:42.707000 c 2017-02-06 11:55:02.039000 2 b 2017-02-06 11:53:42.707000 c 2017-02-06 11:55:04.044000 3 b 2017-02-06 11:53:42.707000 c 2017-02-06 11:55:06.049000 |
2 111111111111 2017-02-06 11:57:15 +08:00 |
3 111111111111 2017-02-06 11:59:10 +08:00 @111111111111 打开之后搜索“原因解释如下:” |
4 jingniao 2017-02-06 12:00:13 +08:00 年前刚遇到这个问题,你把括号去掉就好了 |
5 pango 2017-02-06 12:01:57 +08:00 请使用: b=lambda: datetime.datetime.now() 建议先把书看看好,基础概念弄清楚后可以节省很多时间 |
6 eyeKi1l 2017-02-06 12:14:47 +08:00 via Android 默认参数的默认值何时被计算? |
7 cxh116 2017-02-06 12:25:24 +08:00 def test(a, b=None)): if b is None: b = datetime.datetime.now() 易懂的办法 |
8 cheerzeng OP |
13 twoyuan 2017-02-07 09:08:08 +08:00 话说这边使用 lambda 和直接传 b=datetime.datetime.now 一样吧 |