【问题标题】:Python Tkinter Tic Tac Toe With lambdaPython Tkinter 井字游戏与 lambda
【发布时间】:2020-12-06 18:45:06
【问题描述】:

我必须使用下面的代码制作井字游戏。唯一的问题是我的班级根本没有教过 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 只是在单个语句中定义函数的一种方式。除了简洁之外,使用lambda 比使用def 没有任何优势;如果您愿意,我会说只需使用def

标签: python tkinter tic-tac-toe


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多