Shriphani <[EMAIL PROTECTED]> writes: > If I have a function that loops over a few elements and is expected to > throw out a few tuples as the output, then what should I be using in > place of return ?
If it makes sense for the set of results to be returned all at once, then return the object that collects them all together — a list of tuples, for example. If, instead, it makes sense for the results to be iterated over, you can write a function that yields results one at a time, without necessarily knowing in advance what the entire set will be:: >>> def fib(max_result): ... """ Yield numbers in the Fibonacci sequence ... to a maximum value of max_result. """ ... prev_results = [0, 0] ... result = 1 ... while result < max_result: ... yield result ... prev_results = [prev_results[1], result] ... result = sum(prev_results) ... The function, when called, will return a generator object that you can either iterate over:: >>> fib_generator = fib(100) >>> for n in fib_generator: ... print n ... 1 1 2 3 5 8 13 21 34 55 89 or directly call its 'next' method to get one result at a time until it raises a 'StopIteration' exception:: >>> fib_generator = fib(5) >>> fib_generator.next() 1 >>> fib_generator.next() 1 >>> fib_generator.next() 2 >>> fib_generator.next() 3 >>> fib_generator.next() Traceback (most recent call last): File "<stdin>", line 1, in ? StopIteration -- \ "I have one rule to live by: Don't make it worse." -- Hazel | `\ Woodcock | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list