Python-如何对函数调用进行操作?

Python-How to perform operation on a function call?

我正在构建一个使用我已经定义的另一个函数的函数。第一个完成的函数是 get_value_at_location,它告诉我列表中位置(元组)的值(拼图。)

这是该函数的代码:

def get_value_at_location(puzzle,loc):
    val_loc= puzzle[loc[0]][loc[1]]
    return val_loc

现在我正在尝试构建一个名为 is_valid_solution 的函数,它接受参数 puzzle (given list,) op (operation to be done ex: + - *,) expected total (outcome we want, ) 和位置(元组)来确定操作是否产生预期结果,然后 returns True 或 False。

这是我得到的代码,所以你可以看看我在想什么:

def is_valid_solution(puzzle, op, expected_total, locations):
    loc=location
    if (get_value_at_location(puzzle,loc)) +(op) ==expected_total:
        return True
    else:
        return False

示例input/output:

([[1]], '+', 1, [(0,0)]) → True

([[1,2],[2,1]], '-', 1, [(0,0),(1,0)]) → True

([[1,2],[2,1]], '+', 4, [(0,0),(0,1)]) → False

这显然是正确的,我只是不知道如何做我想做的事?我该如何实施?

选项 A

与其尝试使用 "+""*" 作为字符串,不如使用 operator 模块。

> import operator
> operator.add(2, 3)
5
> operator.mul(2, 3)
6

您可以将 operator.add 作为 op 参数传递,然后调用您的函数:

def apply(a, b, op):
    return op(a, b)

apply(2, 3, operator.add) # 5

选项 B

使用if按字符串名称选择操作:

def apply(a, b, op):
    if op == '+':
        return a + b
    if op == '*':
        return a * b

apply(2, 3, '*') # 6