Pythonのプログラムを IPythonで実行すると、結果が変わっていた。 調べると、元々ビルトインのallがnumpyのallに変わっていた。 しかもnumpyのallはジェネレータを受け取ると常にTrueになっている!

all([0])
all(i for i in [0])
all([i for i in [0]])
__builtin__.all(i for i in [0])

1行目は期待通りFalseだが2行目はジェネレータを返しboolにするとTrue扱いだ。 期待通りにするには、3行目か4行目のようにするしかない。 忘れないようにするには、最初に「all = __builtin__.all」とするか。 「from numpy import all」で戻る。