def X(l=[]):奇怪.Python错误?

大家好.
我偶然发现了一种我根本不了解的python行为.
Python 2.5.2(R252:60911,Jul 31 2008,17:28:52)
# 功能
def x(l = []):
L.Append(1)
打印l
#x的第一个呼叫
X()
[1]
#X的链接X
X()
[1,1]
列表参数" l"在x()连续的两个连续呼叫之间有何处.
为什么不使用空列表重新创建它?
这是正确的行为还是python错误?
有人对描述这种行为的语言文档有任何指针吗?
谢谢大家
Bart Van Deenen

# 回答1


8月22日,11:13*am,巴特·范·戴嫩(Bart Van Deenen)
http://docs.python.org/ref/function.html
"当功能定义时,评估默认参数值
被执行."
取决于您使用的常见方法是这样做
def x(lst = none):
如果LST没有:
通过#lst尚未设置为任何东西
别的:
通过#lst已将某物设置为某物
# 回答2


2008年8月22日星期五11:13:52 +0200,Bart Van Deenen写道:
...
是的,它记录在常见问题中:http://www.python.org/doc/faq/general/
问题4.22.
- -
问候,
wojtek walczak,http://tosh.pl/gminick/
# 回答3


你好
感谢您的回答.我已经找到了您的解决方案,但是现在我了解了行为的来源.还有一个问题:我可以在某个地方找到我的参数" L"吗?我看了很多对象,但找不到.
谢谢
巴特. codexhydedeyde*****@gmail.com写道:( _@_)
Wojtek Walczak Schrieb:
...
是的,它记录在常见问题中:http://www.python.org/doc/faq/general/
问题4.22.
太奇妙了.我没有正确分析这个,但是恕我直言,这个问题是
该列表中的单个问题最问的问题(或更确切地说是产生的效果).
也许我们应该在http://docs.python.org/tut/node6.htm...000000000000000000中获得 *真正的 *显式 *
and http://docs.python.org/ref/function.html
大,红色警告或类似的警告.
diez
# 回答4


Bart van Deenen aécrit:
(ot:请不要排名第一 - 更正)
(剪)
def foo(x =" x"的默认值):
经过
打印foo.func_defaults
=('x'的默认值,)
# 回答5


在2008年8月22日星期五11:41:18 +0200上,巴特·范·戴嫩(Bart Van Deenen)写道:
yourfunction.func_globals ['yourfunction'].func_defaults
- -
问候,
wojtek walczak,http://tosh.pl/gminick/
# 回答6


在2008年8月22日星期五11:42:03 +0200,Diez B. Roggisch写道:
+1
记录这一点也应该使理解更容易
一个前面的可变/不变物体之间的区别
来到c.l.py上,询问它.
- -
问候,
wojtek walczak,http://tosh.pl/gminick/
# 回答7


Diez B. Roggisch写道:
我有点愚蠢地问新闻组的常见问题解答.这个特定问题的问题在于,我发现很难找到可以给出有意义答案的查询.
感谢您的耐心等待.
巴特
# 回答8


巴特·范·戴嫩(Bart Van Deenen)写道:
查看我的新主题"如何搜索Python手册".
tjr
# 回答9


巴特 Van Deenen写道:http://effbot.org/zone/default-values.htm Python在那里已经近20年了. 我认为你可以安全 假设如果这真的是一个错误,其他人会发现它 目前为止.
# 回答10

巴特·范·戴嫩(Bart Van Deenen)写道: 目前,我碰巧正在阅读有关装饰者的信息: 从副本导入deepcopy Def NodeFault(MyFunc): myfunc_defaults = myfunc.func_defaults Def Fresh(*Args,** Kwargs): myfunc.func_defaults = deepcopy(myfunc_defaults) 返回myfunc(*args,** kwargs) 返回新鲜 @nodefault def x(l = []): L.Append(1) 打印l .... X() ... [1] [1] [1] [1] [1] 这只是一种非常奇特的做法: def x(l = []): 如果我没有: l = [] L.Append(1) 打印l *两便士的声音 *

标签: python

添加新评论