obtaining multiple values from a function.
Ben Finney
bignose+hates-spam at benfinney.id.au
Tue Sep 25 10:41:54 CEST 2007
Shriphani <shriphanip at gmail.com> 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
More information about the Python-list
mailing list