【问题标题】:Create different functions from loop in Python [duplicate]在Python中从循环创建不同的函数[重复]
【发布时间】:2020-08-10 15:29:06
【问题描述】:

我正在尝试构建 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 逻辑的人都可以帮助我。 提前感谢任何帮助。

【问题讨论】:

    标签: python logic


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      相关资源
      最近更新 更多