我已经看到很多关于将函数存储在变量中以供执行的信息,但显示的函数始终是:
def foo():
print("Hello")
x = foo
x()
Run Code Online (Sandbox Code Playgroud)
种类。是否可以存储函数及其变量以供以后执行?我目前已经解决了这个问题,方法是创建一个元组,其中函数作为第一项,变量作为第二项的嵌套元组,然后调用:
menu_input[KEY_D] = action_system.drop_item, (character,))
...LATER IN CODE...
for key in current_input:
if key in menu.menu_input.keys():
func, args = menu.menu_input[keys]
func(*args)
Run Code Online (Sandbox Code Playgroud)
但我真的更希望能够将函数及其变量存储在一起。
我希望能够存储:
menu_input[KEY_D] = action_system.drop_item(character)
...LATER IN CODE...
for key in current_input:
if key in menu.menu_input.keys():
menu.menu_input[keys]()
Run Code Online (Sandbox Code Playgroud)
因为处理菜单输入的函数不理解或不关心菜单函数本身,所以它真的不需要看到输入或关心传递的参数。
这可能吗?如果是这样,我错过了什么?对不起,如果这很明显或显然是个坏主意——对python来说相对较新。如果这是一个糟糕的主意,我很想知道为什么。我避免将它作为菜单项的类函数,因为我试图在实体-组件-系统模型中工作,其中组件存储所有数据,系统对它们进行操作。
该functools.partial功能是为此目的而设计的:
from functools import partial
menu_input[KEY_D] = partial(action_system.drop_item, character)
...
for key in current_input:
if key in menu.menu_input:
menu.menu_input[key]()
Run Code Online (Sandbox Code Playgroud)