【问题标题】:How can this behavior be acomplished? Python "short circuting" test这种行为如何实现? Python“短路”测试
【发布时间】:2010-12-10 05:19:30
【问题描述】:

我有以下代码:

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    for x in geodatabaseList:
        if x == self.outputGeodatabase:
            return True
        else:
            pass
    return False

我需要知道以下几点:如果 if 条件评估为 true,函数会停止在列表中查找并且永远不会返回 False?还是我需要一个 break 语句?

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    for x in geodatabaseList:
        if x == self.outputGeodatabase:
            return True
            break
        else:
            pass
    return False

如果以下代码不能解决我的问题,我可以用什么来模拟该行为?

谢谢

【问题讨论】:

    标签: python short-circuiting


    【解决方案1】:

    return 是该行的结尾,之后该函数中不会发生任何其他事情。另一方面,您可以将函数重写为

    def testGeodatabase(self):
        return self.outputGeodatabase in self.gp.ListWorkspaces("*","ALL")
    

    【讨论】:

    • 非常感谢。非常pythonic :P 在这种情况下,如果列表中不存在 self.outputGeodatabase,这会导致函数返回 None 或 False 吗?我的赌注是没有...
    • 没必要拿你的钱去冒险……试试吧! print 'a' in ('b','c')
    • docs.python.org/reference/expressions.html#in 向下滚动到“正在和未在测试集合成员资格的操作员。”
    【解决方案2】:

    您不需要上面代码中的 break 关键字。其实你不需要

    else:
       pass
    

    要么。

    return True
    

    将退出函数。

    【讨论】:

      【解决方案3】:

      return 语句确实会导致函数在此时退出。函数中不再执行任何代码。

      这是一个简单的测试,您可以运行它来证明这一点:

      def someFunction(nums):
          for i in nums:
              if i == 1:
                  return "Found 1!"
          return "Never found 1"
      

      并运行它:

      >>> someFunction([2])  
      'Never found 1'  
      >>> someFunction([2,1,3])  
      'Found 1!'  
      

      【讨论】:

        【解决方案4】:

        我认为使用any()是最好的选择:

        def testGeodatabase(self):
            geodatabaseList = self.gp.ListWorkspaces("*","ALL")
            return any(x == self.outputGeodatabase for x in geodatabaseList)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-30
          • 2013-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多