Python Tkinter 井字游戏与 lambda

Python Tkinter Tic Tac Toe With lambda

我必须使用下面的代码制作井字游戏。唯一的问题是我的 class 根本没有教过 lambda,没有人知道该怎么做。我对它的理解是一个非常简单的函数,但是我不明白为什么我们不应该只使用常规函数并创建更多按钮。

from tkinter import *
import tkinter.font as font

root = Tk()
root.geometry("500x500")

myFont = font.Font(family = "Courier", size = 80)

board = [[Button(root, text = "-", font = myFont, command = (lambda x = x, y = y: update(x,y))) for y in range(3)] for x in range(3)]

for x in range(3):
    for y in range(3):
        board[x][y].grid(row=x,column=y)

def update(x,y):
    print(str(x) + str(y))

root.mainloop()

lambda 的唯一目的是简洁。此代码:

board = [[Button(root, text = "-", font = myFont, command = (lambda x=x, y=y: update(x,y))) for y in range(3)] for x in range(3)]

与此代码相同:

board = []
for x in range(3):
    row = []
    for y in range(3):
        def fn(x=x, y=y):
            update(x, y)
        row.append(Button(root, text = "-", font = myFont, command = fn)
    board.append(row)

显然第一种形式更简洁——lambda 很有用,因为它允许您将函数定义为单个表达式的一部分,而不必写出 def 块。第二种形式的 fn 完全等同于第一种形式的 lambda x=x, y=y: update(x, y)