【问题标题】:How do I apply unknown arguments to a function in Python 3.x?如何将未知参数应用于 Python 3.x 中的函数?
【发布时间】: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


    【解决方案1】:

    尝试使用argument unpacking

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

    【讨论】:

    • huahuahuau.. 太棒了!比申请好得多,我不知道。非常感谢!
    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2013-01-07
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多