为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

函数式编程 2023-05-09 16:00:09
我正在尝试构建一个 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)在执行每个对象的命令时,我期望的结果是:0123456789但相反,我得到:9999999999我简化了我的代码,这样任何了解 Python 逻辑的人都可以帮助我。提前感谢任何帮助。
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

这个稍作修改的版本可以如您所愿地工作。


它本质上是变量范围问题。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()



查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信