有没有办法在分配给字典时停止调用函数?

问题描述 投票:0回答:1

我正在使用 pygame 制作游戏,并尝试添加项目。我有一个每个项目的函数,当您获得该项目时可以调用该函数(这部分效果很好)。

但是,当我将这些函数分配给字典时,它会调用并使用它们,为您提供游戏中的每个项目。我已经测试了使用这些函数的每一段代码,所以我知道这就是原因。此外,我之前多次遇到过这个问题,所以我确信这就是正在发生的事情。

(编辑:澄清一下,有一个单独的列表,其中包含已获取的项目,该列表应该是空的。每个项目的效果都被添加,但不是项目本身,证明这是错误的原因)

这是项目字典:

items = {"Damage Stone": damageStone(player), "Health Stone": healthStone(player), "Burn": burn(player), "Poison": poison(player), "Freeze": freeze(player)}

这是在主游戏循环开始之前分配的。

有什么方法可以防止分配到此列表时调用函数吗?

备注:

显然我可以编写一段代码来撤销每个项目的效果,但这并不是最佳选择,随着项目数量的增长会变得非常令人沮丧。

Lambda 函数也有同样的问题,也有同样的问题。

python
1个回答
0
投票

如果您希望字典包含稍后调用的函数,您可以将 函数对象放入字典中,如下所示:

items = { "Damage Stone": damageStone, "Health Stone": healthStone, ... }
因为函数名称后面没有括号,所以不会立即调用它们。  字典只存储

函数对象,您可以稍后调用:

game_function = items["Damage Stone"] game_function(player)
    
© www.soinside.com 2019 - 2024. All rights reserved.