在 python 中使用字典调用函数

Call functions using dictionaries in python

提问人:user14073111 提问时间:9/6/2023 更新时间:9/6/2023 访问量:40

问:

假设我有这个伪代码:

x11 = {
    "exec": {
        "test1": "test1"
    },
    "mount": {
        "test2": "test2"
    },
    "unmount": {
        "test3": "test3"
    },
}

def get_exec(dict1):
    return dict1["test1"]

def get_mount(dict1):
    return dict1["test2"]

def get_unmount(dict1):
    return dict1["test2"]

x1 = ["exec", "mount", "unmount"]

for elem in x1:
    e1 = x11.get(elem)
    get_e = {
        "exec": get_exec(e1),
        "mount": get_mount(e1),
        "unmount": get_unmount(e1),
    }

    get_e[elem]

基本上,我试图避免很多 if 条件,并希望使用字典并在每次迭代中调用正确的函数。但是我所拥有的不起作用,因为随后调用了字典,它将转到每个函数并执行操作。基本上,在我的情况下,每个函数都在检查不同的键,当 e1 传递给函数时(仅在“exec”情况下有效,那么它在其他函数上失败......

有没有办法让类似的东西有效?

python-3.x 函数 字典 方法

评论


答:

1赞 user14073111 9/6/2023 #1

嗯,似乎很容易。通过改变这一点,它起作用了:

for elem in x1:
    e1 = x11.get(elem)
    get_e = {
        "exec": get_exec,
        "mount": get_mount,
        "unmount": get_unmount,
    }

print(get_e[elem](e1))
2赞 quamrana 9/6/2023 #2

在定义字典时,你不能调用你的函数:

for elem in x1:
    e1 = x11.get(elem)
    get_e = {
        "exec": get_exec,
        "mount": get_mount,
        "unmount": get_unmount,
    }

    get_e[elem](e1)

选择函数后调用该函数。

3赞 Henrique Andrade 9/6/2023 #3

函数是 Python 中的对象,因此它们可以是字典中的值

def func1():
    ...


def func2():
    ...


def func3():
    ...

x11 = {
    "exec": func1,
    "mount": func2,
    "unmount": func3
}

然后你只需根据你拥有的键调用函数, 例如

# it will call func2
x11["mount"]()