1

重複の可能性:
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 つの親オブジェクトの下にあります)。すべてを閉じて再起動すると、エラーは消えますが、データをリロードすると再び表示されます。

私の考えでは、メモリの破損が起こっているに違いありませんが、それが何であるかについて困惑しています. 何か案は?

4

0 に答える 0