Function that returns function that repeats boolean results

TrueだったらFalseで、FalseだったらTrueにしたい。

なんかそんなことそこかしこで必要で、その為の便利なものが

あるのかなぁと思ったんだけど無いぽい。

0と1を次々返す方法 - When it’s ready.

Yield

python

実装は自然だが、next()がわずらわしい。

404 Blog Not Found:Algorithm - 0と1を次々と返す簡単なお仕事


弾さん風に記述するならば、こう書くかなぁ。

#!/usr/local/bin/python3.1 -t

import itertools

def flipflop(p=False):
    def _():
        return next(g)
    g = itertools.cycle((not not p, not p))
    return _

if __name__ == '__main__':
    f1 = flipflop()
    print('f1:', f1())
    print('f1:', f1())
    print('f1:', f1())
    print('f1:', f1())
    print()

    f2 = flipflop(True)
    print('f2:', f2())
    print('f2:', f2())
    print('f2:', f2())
    print('f2:', f2())
    print()

    print('f1:', f1())
    print('f1:', f1())
    print()

    print('f2:', f2())
    print('f2:', f2())
f1: False       # False、Trueの順
f1: True
f1: False
f1: True

f2: True        # True, Falseの順
f2: False
f2: True
f2: False

f1: False       # f1を再開
f1: True

f2: True        # f2を再開
f2: False