[Edu-sig] illustrating send (used with yield) very simply

kirby urner kirby.urner at gmail.com
Fri Aug 16 22:08:20 CEST 2013


"""
Plain vanilla Fibonacci Numbers but with the ability
to reset the initial pair mid-course

Kirby Urner (c) MIT License
"""

import unittest

def fibs(a, b):
    while True:
        d = yield a  # send to a, b
        if d:
            a, b = d[0], d[1]
            continue
        b, a = a + b, b

class Test_Fib(unittest.TestCase):

    def test_basics(self):
        thegen = fibs(0, 1)
        self.assertEqual(next(thegen), 0)
        self.assertEqual(next(thegen), 1)
        self.assertEqual(next(thegen), 1)
        self.assertEqual(next(thegen), 2)
        self.assertEqual(next(thegen), 3)
        self.assertEqual(next(thegen), 5)
        self.assertEqual(next(thegen), 8)
        self.assertEqual(next(thegen), 13)
        self.assertEqual(next(thegen), 21)

    def test_updating(self):
        thegen = fibs(0, 1)
        self.assertEqual(next(thegen), 0)
        self.assertEqual(next(thegen), 1)
        self.assertEqual(thegen.send((20, 21)), 20)  # update pairing
        self.assertEqual(next(thegen), 21)
        self.assertEqual(next(thegen), 41)
        self.assertEqual(next(thegen), 62)
        self.assertEqual(next(thegen), 103)

if __name__ == "__main__":
    unittest.main()

"""
/Library/Frameworks/Python.framework/Versions/3.2/bin/python3
/Users/kurner/Documents/anyproject.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Process finished with exit code 0
"""
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20130816/571d5e82/attachment.html>


More information about the Edu-sig mailing list