gpt4 book ai didi

Python 闭包,默认参数不等于使用 functools.partial 的解决方案?

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:20 24 4
gpt4 key购买 nike

<分区>

我正在使用 PyQt 在 Python 3.2 中做一个小游戏。我需要插入几乎相同但具有其他参数的菜单操作。我想我会使用 lambda 来完成它,但事实证明所有操作都有相同的参数。

原来是闭包问题,我按照this post解决了关于其他问题。但是其中一个应该等同于另一个的建议解决方案(带有默认参数)不起作用。当我对打印功能进行了一些测试时,两种解决方案都是相同的。

我想了解为什么在这种情况下它的工作方式不同。连接方法是否以某种方式影响它?它可能与 python 作用域有关。这是我正在做的事情的片段(我省略了为操作指定名称和文本):

cardsOptions = [15, 30, 45, 50, 55, 60, 10]
self.startActions = []
lambdas = []
for co in cardsOptions:
action = QtGui.QAction(MainWindow)
self.menuNewGame.addAction(action)
# This works
# action.triggered.connect(partial(self.StartGame, 8, co))

lamb = (lambda a = co: self.StartGame(8, a))
lambdas.append(lamb)

# This doesn't work, when StartGame is called it gets arguments 8, false
action.triggered.connect(lamb)
self.startActions.append(action)

# This proves that closure was done ok, and it saved all co values
[m() for m in lambdas]

最让我吃惊的是它传递了 false 作为第二个参数,就好像他评估了 a = co?那么使用默认参数的闭包与使用部分闭包有何不同,它以这种方式工作?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com