【发布时间】:2015-01-19 19:00:13
【问题描述】:
我正在为我的engine 开发自己的 GUI,并创建了一个名为 EwConsole 的“对象”(用于输入命令的简单“下拉”控制台)。为了做到这一点,我只需将要“通过输入/返回触发”的函数的 ID 存储为函数对象本身的键。我的问题在于参数和 Python 3.x。
这是我创建新“控制台命令”的方法:
def create_command(self, command_id, command_function):
self["commands"][command_id] = command_function
我开发了自己的输入对象,称为“EwInput”,它有一个方法可以返回写入其中的字符串值。为了分离存储命令的参数,我拆分了字符串的空格。这是在控制台中“监视”“命令”的代码:
def watch_for_commands(self):
if push_enter():
values = self["input"].get_value().split()
if values[0] in self["commands"]:
if len(values) == 1:
self["commands"][values[0]]()
elif len(values) > 1:
try:
self["commands"][values[0]](values[1:]) # Problem here.
except TypeError:
raise ErgameError("The given function '{0}' does not support the given arguments: {1}.".format(values[0], values[1:]))
else:
print("There is no such command: {}".format(values[0]))
如您所见,由于“命令创建”是完全通用的,因此无法知道给定函数将有多少个参数。 As one can see here,在旧的 2.x 中,可以使用带有参数列表的“应用”。
现在问题来了:
在 Python 3.x 中,如果强制我使用“__ call __”,我如何可以将未知数量的参数“应用”到函数? Python 3.x 中有没有一种方法可以将任意 SEQUENCE 参数应用于未知函数?
【问题讨论】:
标签: python function arguments apply