从 Python 中的循环创建不同的函数

我正在尝试构建一个 tkinter GUI,但我遇到了 Python 编程逻辑问题。我的问题如下:我正在通过以下方式创建一堆对象:


class Aplication:

    def createObjects(self):

        objects = []

        for i in range(10):

            obj = Object(command = lambda: self.myFunction(i))

            objects.append(obj)


    def myFunction(self, i):

        print(i)

在执行每个对象的命令时,我期望的结果是:


0

1

2

3

4

5

6

7

8

9

但相反,我得到:


9

9

9

9

9

9

9

9

9

9

我简化了我的代码,这样任何了解 Python 逻辑的人都可以帮助我。提前感谢任何帮助。


函数式编程
浏览 132回答 1
1回答

肥皂起泡泡

这个稍作修改的版本可以如您所愿地工作。它本质上是变量范围问题。i在您的实现中,该函数在运行时查找,何时i已更新为 9。如果要保留 的“当前”值i,则需要定义一个具有当前值的函数,i如下所示。class Object:    def __init__(self, command):        self.command = command        class Application:    def createObjects(self):        objects = []        for i in range(10):            obj = Object(command = self.myFunction(i))            objects.append(obj)        return objects        def myFunction(self, i):        return lambda: print(i)a = Application()os = a.createObjects()for o in os:    o.command()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python