【问题标题】:How to check which return statement was executed in a function?如何检查函数中执行了哪个返回语句?
【发布时间】:2018-05-16 09:54:39
【问题描述】:

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

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

a = check_val(3)

我如何知道currentprevious 是否被退回?

【问题讨论】:

  • 你可以让你的变量名做:a_as_str,然后和“current”比较
  • 你想要的行为是什么?
  • 如果您没有在全局命名空间中定义value,这应该会引发错误。如果你这样做了,你可以随时检查a - 10 == value是否返回current
  • 我不知道为什么这被否决了。 似乎对我来说很清楚 OP 需要什么(以及至少另一个)。 可能有重复,但我找不到。

标签: python function if-statement return


【解决方案1】:

您可以让您的函数返回一个带有必要元数据的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】:

    除非你返回一个带有指定退出位置的标志的元组,否则你不能这样做

    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】:

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

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

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

      这样,也许:

      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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 2011-10-02
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 1970-01-01
        • 2019-09-16
        相关资源
        最近更新 更多