重複の可能性:
Python ビルトイン「all」とジェネレーター
IPython で次の再現可能な動作に遭遇しました。
def test(lst):
for val in (v is not None for v in lst):
print val
print all(v is not None for v in lst)
print
print [v is not None for v in lst]
print all([v is not None for v in lst])
print
print
for val in (v is None for v in lst):
print val
print all(v is None for v in lst)
print
print [v is None for v in lst]
print all([v is None for v in lst])
>>> test([1])
True
True
[True]
True
False
True
[False]
False
このエラーは元々、はるかに大きなアルゴリズムの途中で発生しましたが、上記のテスト ケースに縮小されます。
この出力は明らかに間違っていますが、何が起こっているのかわかりません。標準の python シェルで繰り返すと、期待される出力が得られます。
その他の注意事項
print ステートメントの 3 番目のセットはエラーを示しています
。FalseではなくTrueall(v is None for v in [1])
を返す必要があります。
IPython は、多くのオブジェクトがロードされた状態で実行されています (約 1.5GB 相当、ほとんどが 1 つの親オブジェクトの下にあります)。すべてを閉じて再起動すると、エラーは消えますが、データをリロードすると再び表示されます。
私の考えでは、メモリの破損が起こっているに違いありませんが、それが何であるかについて困惑しています. 何か案は?