Python中循环上下文中的默认值?

时间:2015-10-18 02:05:05

标签: python

现在我想我已经理解了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变量在运行期间是有界限的,但是它不应该与第二个变量相同吗?非常感谢你。

0 个答案:

没有答案