Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中从循环创建不同的函数_Python_Logic - Fatal编程技术网

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

在Python中从循环创建不同的函数,python,logic,Python,Logic,我正在尝试构建一个tkinter GUI,我遇到了一个Python编程逻辑问题。我的问题如下:我正在以以下方式创建一组对象: 类应用: 定义createObjects(自): 对象=[] 对于范围(10)内的i: obj=Object(command=lambda:self.myFunction(i)) objects.append(obj) def myFunction(自我,i): 印刷品(一) 在执行每个对象的命令时,我期望得到以下结果: 0 1 2 3 4 5 6 7 8 9 但我得

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

类应用:
定义createObjects(自):
对象=[]
对于范围(10)内的i:
obj=Object(command=lambda:self.myFunction(i))
objects.append(obj)
def myFunction(自我,i):
印刷品(一)
在执行每个对象的命令时,我期望得到以下结果:

0
1
2
3
4
5
6
7
8
9
但我得到的是:

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

这个稍加修改的版本可以正常工作

它本质上是可变范围问题。 在您的实现中,函数在运行时查找
i
,此时
i
已更新为9。 如果要保留
i
的“当前”值,需要使用当前
i
定义一个函数,如下所示

类对象:
定义初始化(self,命令):
self.command=命令
班级申请:
定义createObjects(自):
对象=[]
对于范围(10)内的i:
obj=Object(command=self.myFunction(i))
objects.append(obj)
返回对象
def myFunction(自我,i):
返回λ:打印(i)
a=应用程序()
os=a.createObjects()
对于操作系统中的o:
o、 命令()

这个稍加修改的版本正如您所期望的那样工作

它本质上是可变范围问题。 在您的实现中,函数在运行时查找
i
,此时
i
已更新为9。 如果要保留
i
的“当前”值,需要使用当前
i
定义一个函数,如下所示

类对象:
定义初始化(self,命令):
self.command=命令
班级申请:
定义createObjects(自):
对象=[]
对于范围(10)内的i:
obj=Object(command=self.myFunction(i))
objects.append(obj)
返回对象
def myFunction(自我,i):
返回λ:打印(i)
a=应用程序()
os=a.createObjects()
对于操作系统中的o:
o、 命令()