Python-如何在函数调用上执行操作?

时间:2017-03-29 16:49:00

标签: python function python-3.x calling-convention

我正在构建一个使用我已定义的另一个函数的函数。第一个完成的函数是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(给定列表)op(要完成的操作:+ - *,)预期的总数(我们想要的结果)和位置(元组)确定操作是否产生预期结果,然后返回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

示例输入/输出:

  

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

     

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

     

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

显然这是正确的,我只是不知道做我想做的方法?我该如何实现呢?

1 个答案:

答案 0 :(得分:1)

选项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