この動作はどのように達成できますか? Python“ショートサーキット#8221;テスト

StackOverflow https://stackoverflow.com/questions/1626267

  •  06-07-2019
  •  | 
  •  

質問

次のコードがあります:

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

次のコードで問題が解決しない場合、その動作をシミュレートするために何を使用できますか?

ありがとう

役に立ちましたか?

解決

return は行の終わりであり、それ以降はその関数では何も起こりません。一方、関数を次のように書き換えることができます

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

他のヒント

上記のコードではbreakキーワードは必要ありません。実際には、あなたは必要ありません

else:
   pass

どちらか。

return True

関数を終了します。

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!'  

any()を使用するのが最良の選択だと思います:

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    return any(x == self.outputGeodatabase for x in geodatabaseList)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top