这里似乎已经有人问过这个问题:
但我不明白答案。 下面是同一问题的另一个代码示例:
如何理解for循环中的作用域?
[edit]我的“orient”函数定义如下:[/edit]
orient = lambda snake, direction: snake.changeDirection(direction)
我尝试用这个循环分配tkinter绑定:
for player in Parameters.players:
snake = self.snakes[player]
self.root.bind(bindings[player]['up'], lambda event : orient(snake, Direction.N))
self.root.bind(bindings[player]['left'], lambda event : orient(snake, Direction.W))
self.root.bind(bindings[player]['down'], lambda event : orient(snake, Direction.S))
self.root.bind(bindings[player]['right'], lambda event : orient(snake, Direction.E))
但是这两个绑定被分配给了最后一条蛇
所以我试着“手动”循环:
player1 = Parameters.players[0]
snake1 = self.snakes[player1]
self.root.bind(bindings[player1]['up'], lambda event : orient(snake1, Direction.N))
self.root.bind(bindings[player1]['left'], lambda event : orient(snake1, Direction.W))
self.root.bind(bindings[player1]['down'], lambda event : orient(snake1, Direction.S))
self.root.bind(bindings[player1]['right'], lambda event : orient(snake1, Direction.E))
player2 = Parameters.players[1]
snake2 = self.snakes[player2]
self.root.bind(bindings[player2]['up'], lambda event : orient(snake2, Direction.N))
self.root.bind(bindings[player2]['left'], lambda event : orient(snake2, Direction.W))
self.root.bind(bindings[player2]['down'], lambda event : orient(snake2, Direction.S))
self.root.bind(bindings[player2]['right'], lambda event : orient(snake2, Direction.E))
它起作用了(每一条蛇都有自己的束缚)
lambda函数实际上是如何创建的?为什么它“捕获”变量并因此被覆盖而不是保留其值
最终代码是:
注意lambda定义中的“snake=snake”
此处解释:Creating functions in a loop
相关问题 更多 >
编程相关推荐