Help with generators outside of loops.

Christopher J. Bottaro cjbottaro at alumni.cs.utexas.edu
Wed Dec 8 11:11:25 EST 2004


Steven Bethard wrote:
> I don't do much with SQL/databases stuff, but if you really know the
> result will be a single row, you can take advantage of tuple unpacking
> and do something like:
> 
> row, = obj.ExecSQLQuery(sql, args)
> 
> or
> 
> [row] = obj.ExecSQLQuery(sql, args)
> 
> This has the advantage that you'll get a ValueError if you happen to be
> wrong (and there are more or fewer values in the generator).
> 
>  >>> def g(n):
> ...     for i in range(n):
> ...         yield i
> ...
>  >>> x, = g(1)
>  >>> x
> 0
>  >>> x, = g(2)
> Traceback (most recent call last):
>    File "<interactive input>", line 1, in ?
> ValueError: too many values to unpack
>  >>> x, = g(0)
> Traceback (most recent call last):
>    File "<interactive input>", line 1, in ?
> ValueError: need more than 0 values to unpack
> 
> Steve

Wow, good advice.  One question, how is the generator class implemented so
that if assigned to a tuple/list, it knows what to do?  Is it possible to
overload the assignment operator kinda like in C++?

Thank you all who replied to the original post, it was very helpful.




More information about the Python-list mailing list