On 01/07/13 19:58, John Steedman wrote:
Good morning all,
A question that I am unsure about. I THINK I have the basics, but I am not
sure and remain curious.
1. What does this mean?
if my_object in my_sequence:
...
Others have already answered this, but for completion, it is testing whether "my_object"
can be found as an element of the sequence, iterable, or container "my_sequence".
2. What can go wrong with this? What should a code review pick up on?
Depends on context. Without context, nearly anything could go wrong:
NameError -- perhaps one or both of the names are undefined;
TypeError -- perhaps the names are misleading, and my_sequence is not a
sequence at all;
Perhaps my_sequence is an infinite iterator and the above will never complete;
etc.
I believe that "my_sequence" might be a either container class or a
sequence type. An effective __hash__ function would be required for each
"my_object".
Correct, if my_sequence is in fact a dict or other mapping that relies on
hashing.
But in fact it's not just the presence of a __hash__ method on my_object which
is required, but that the __hash__ method can actually return. E.g. tuples have
a __hash__ method, but that relies on every element of the tuple being hashable:
py> (1, 2, 3) in {}
False
py> (1, 2, [3]) in {}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
I HTINK you'd need to avoid using floating point variables
that might round incorrectly.
No, Python floats are not rounded when doing containment testing. They may have
been rounded earlier, but `x in container` will use the full precision of the
float.
Are there other issues?
Nothing obvious to me.
--
Steven
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor