现在我想我已经理解了Python中与默认值相关的大多数问题。关于Stackoverflow的问题是一个很大的帮助,但有一个案例/示例,他们没有解决。该示例位于以下链接中:http://effbot.org/zone/default-values.htm 这是有问题的部分:
最后,应该注意的是,更高级的Python代码经常使用这种机制来发挥其优势;例如,如果您在循环中创建一堆UI按钮,则可以尝试类似:
for i in range(10): def callback(): print "clicked button", i UI.Button("button %s" % i, callback)
只发现所有回调都打印相同的值(在这种情况下最可能是9)。原因是Python的嵌套作用域绑定到变量而不是对象值,因此所有回调实例都将看到“i”变量的当前(= last)值。要解决此问题,请使用显式绑定:
for i in range(10): def callback(i=i): print "clicked button", i UI.Button("button %s" % i, callback)
i=i
部分将参数i
(局部变量)绑定到外部变量i
的当前值。
我可以理解为什么第二个例子的工作方式如下:在def
行中,函数中的i
明确地限制为for中的i
(这是在" def"语句,即定义时间)。但我不知道的是第一个例子是如何运作的。在我看来,i
变量在运行期间是有界限的,但是它不应该与第二个变量相同吗?非常感谢你。