作者timTan (用口头禅区分年记)
看板Python
标题Re: [问题] 基础 list append
时间Fri Nov 13 18:00:28 2009
※ 引述《zha1 (zha1)》之铭言:
: args.append(0)
: print args
: [0]
: [1, 0]
: >>> a()
: [0, 0] 为什麽这里, a() 完会是 2 , 上面就一次了 .. 为什麽 1 不见了 . XD
: [1, 2, 3, 4, 0]
: [0, 0, 0]
default parameters 只会evaluate 一次。
所以这里你的 args 就好像 C语言里的 static variable,就算function 已经
return 了, args的值还是存在着。
所以请你用以下的写法:
def a( arg = None):
if arg == None :
arg = []
arg.append(10)
print arg
FYI:
http://docs.python.org/reference/compound_stmts.html
Default parameter values are
evaluated when the function definition is executed
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.45
※ 编辑: timTan 来自: 140.112.30.45 (11/13 18:00)
※ 编辑: timTan 来自: 140.112.30.45 (11/13 18:01)
※ 编辑: timTan 来自: 140.112.30.45 (11/13 18:03)
※ 编辑: timTan 来自: 140.112.30.45 (11/13 18:11)
1F:推 SMUGEN:所以指定Default parameter的值为immutable类型就可避免? 11/13 21:03
2F:→ timTan:上面说的一种解法,设定成None再另外assigsn是另一种解法 11/13 23:47