意外的默认参数行为(可能是bug?)

嗨,我刚刚遇到了我没想到的python行为.拿
以下代码:
------------------------------------------------------------------------------------ ------------------------------
班级父母:
a = 1
def m(self,param = a):
打印" param =%d"%param
班级孩子(父母):
a = 2
p = parent()
P.M()
c = child()
厘米 ()
------------------------------------------------------------------------------------ ------------------------------
我希望收到以下输出:
param = 1
param = 2
但实际上我得到了:
param = 1
param = 1
这是正确的行为,然后为什么,还是一个错误?为了
参考,我在UNIX上使用Python 2.5.1.
提前致谢!

# 回答1


sukkop ...@gmail.comnapisa³(a):
我希望这是因为评估了参数的默认值,并且
定义时间绑定.因此,一旦" def m(self,param = a):"行
执行,参数的默认值永远为1.
您能做的就是:
问候,
Marek
# 回答2


在13凸耳中,19:42,Marek.ro ...@wp.pl写道:
是的,这也是我的想法.虽然,在我看来
正确的事情必须完成,这就是为什么我进行报告.
也感谢您的建议,即使我
已经实施了解决方法(两种不同的方法).
问候!
# 回答3


仅供参考,我在官方跟踪器上打开了一个错误:http://bugs.python.org/issue3403.
# 回答4

sute@gmail.com :
是的,这也是我的想法.虽然,在我看来
正确的事情必须完成,这就是为什么我进行报告.
它是正确的.评估默认参数在"声明
时间"而不是在调用中是真正的语言功能,而不是错误.
您会发现您的错误报告很快就关闭了.
- -
自由始终是持不同政见者的自由.
(罗莎·卢森堡)
# 回答5


在18:23的凸耳上,"塞巴斯蒂安\" Lunar \" Wiesner"
它有;).我完全错过了所在的教程
陈述,实际上甚至有一个非常接近我的例子
假如.抱歉浪费时间.
Giorgio

标签: python

添加新评论