繁体   English   中英

如何在Python 3.x中将未知参数应用于函数?

[英]How do I apply unknown arguments to a function in Python 3.x?

我正在为引擎开发自己的GUI,并且创建了一个名为EwConsole的“对象”(一个简单的“下拉”控制台,用于输入命令)。 为了做到这一点,我只存储要“通过输入/返回触发”的函数的ID作为字典中函数对象本身的键。 我的问题是参数和Python3.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]))

如您所见,由于“命令创建”是完全通用的,因此无法知道给定函数将具有多少个参数。 就像在这里看到的那样 ,在旧的2.x版本中,可以将“ apply”与参数列表一起使用。

现在出现问题:

如果它迫使我使用“ __ call __”,如何在Python 3.x中将未知数量的参数“应用于”函数? 在Python 3.x中,有没有一种方法可以将参数的任意SEQUENCE应用于未知函数?

尝试使用参数拆包

self["commands"][values[0]](*values[1:])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM