herePythonの任意/すべてのショートサーキットは明示的に動作していますか?議論に促さ
は同等のコードの動作は定義の一部とみなされるべきall
の行動とのためのいくつかの同等のコードを示唆、または実装がでそれらを実装することができます非短絡の方法?ここで
はCPythonの/ libに/テスト/ test_builtin.pyから関連の抜粋です
def test_all(self):
self.assertEqual(all([2, 4, 6]), True)
self.assertEqual(all([2, None, 6]), False)
self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
self.assertRaises(RuntimeError, all, TestFailingIter())
self.assertRaises(TypeError, all, 10) # Non-iterable
self.assertRaises(TypeError, all) # No args
self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
self.assertEqual(all([]), True) # Empty iterator
S = [50, 60]
self.assertEqual(all(x > 42 for x in S), True)
S = [50, 40, 60]
self.assertEqual(all(x > 42 for x in S), False)
def test_any(self):
self.assertEqual(any([None, None, None]), False)
self.assertEqual(any([None, 4, None]), True)
self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
self.assertRaises(RuntimeError, all, TestFailingIter())
self.assertRaises(TypeError, any, 10) # Non-iterable
self.assertRaises(TypeError, any) # No args
self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
self.assertEqual(any([]), False) # Empty iterator
S = [40, 60, 30]
self.assertEqual(any(x > 42 for x in S), True)
S = [10, 20, 30]
self.assertEqual(any(x > 42 for x in S), False)
それは短絡行動を強制するために何もしない
テストスイートが短絡を強制しないことに興味があります。私の見落としのようです。私はまだ短絡が仕様の一部だと考えています。 – mgilson
あなたが投稿し、[issue](http://bugs.python.org/issue17142)を提出したコードにバグが見つかりました。 – Sjoerd
私は問題の行動について[問題](http://bugs.python.org/issue17255)も提出しました。 – wim