代码之家  ›  专栏  ›  技术社区  ›  Salman Shaukat

如何检查函数中执行了哪个返回语句?

  •  -1
  • Salman Shaukat  · 技术社区  · 6 年前

    嗨,我有一个简单的功能:

    def check_val(value):
        if value < 10:
            previous = value
            return previous
        else:
            current  = value + 10
            return current
    
    a = check_val(3)
    

    我怎么知道 current previous 是否返回?

    3 回复  |  直到 6 年前
        1
  •  2
  •   jpp    6 年前

    您可以让函数返回 tuple 使用必要的元数据并通过顺序解包进行解包:

    def check_val(value):
        if value < 10:
            previous = value
            return previous, 'previous'
        else:
            current  = value + 10
            return current, 'current'
    
    a, b = check_val(3)
    
    print(a, b)
    
    3 previous
    
        2
  •  2
  •   FHTMitchell    6 年前

    除非返回一个带有指定退出位置的标志的元组,否则不能执行此操作

    def check_val(val):
        if value < 10:
            previous = value
            return previous, False
        else:
            current  = value + 10
            return current, True
    
    a, was_current = check_val(3)
    
    print(a, was_current)  # --> 3 False
    
        3
  •  0
  •   Turysaz    6 年前

    首先,你不能直接这么做。无法仅从值本身判断哪个返回给您发送了值。

    当然,您可以返回一个元组,正如在其他答案中指出的那样。

    但在我看来,如果您对这两种信息都感兴趣,那么应该尝试将检查与其他计算分离,因为这样更容易理解返回值。

    像这样,也许:

    def check_condition(value):
        if value < 10:
            return True
        return False
    
    def get_result(value, condition):
        if condition:
            return value
        else:        
            return value + 10
    
    val = 5
    check_result = check_condition(val)
    result = get_result(val, check_result)
    

    很难说这是否有意义,因为我不知道您的用例。在您的特定示例中,我可能会坚持使用元组。