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)
。
我必须使用下面的代码制作井字游戏。唯一的问题是我的 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)
。