【问题标题】:Python-How to perform operation on a function call?Python-如何对函数调用执行操作?
【发布时间】:2017-03-29 16:48:59
【问题描述】:

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

这是该函数的代码:

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

现在我正在尝试构建一个名为 is_valid_solution 的函数,它接受参数拼图(给定列表,)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)]) → 假

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多