Can a simple a==b 'hang' in and endless loop?
Claudio Grondi
claudio.grondi at freenet.de
Wed Jan 18 08:33:49 EST 2006
Steve Holden wrote:
> Claudio Grondi wrote:
>
>> In the process of learning about some deeper details of Python I am
>> curious if it is possible to write a 'prefix' code assigning to a and
>> b something special, so, that Python gets trapped in an endless loop
>> in a line with:
>>
>> if a==b: print 'OK'
>>
>> I mean, it would be of much help to me on my way to understanding
>> Python to know how such prefix code leading to an endless loop can
>> look like and if it is eventually not possible to write such code, to
>> know why it is not possible?
>>
>> My own first rough idea was to create generators which never end and
>> use them in the '==' comparison, but I have not well understood how to
>> write and use generators yet, so I expect from studying this special
>> case to come to some enlightenment.
>>
> Well, you could try this:
>
> >>> class thing:
> ... def __eq__(self, other):
> ... return other == self
> ...
> >>> a = thing()
> >>> b = thing()
> >>> a == b
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "<stdin>", line 3, in __eq__
> File "<stdin>", line 3, in __eq__
> File "<stdin>", line 3, in __eq__
> ...
> File "<stdin>", line 3, in __eq__
> File "<stdin>", line 3, in __eq__
> RuntimeError: maximum recursion depth exceeded
> >>>
>
> Was that what you meant? Or something more like:
>
> >>> class thing:
> ... def __eq__(self, other):
> ... import time; time.sleep(1000000)
> ...
> >>> a = thing()
> >>> b = thing()
> >>> a == b
>
> regards
> Steve
Thanks for the quick reply.
I see, that I have overseen, that as Fredrik also stated, one can
directly manipulate __eq__() as the easiest way to achieve what I
requested.
To explain why I am not happy with it, I will try here to give some more
background information. Sorry for not doing it directly, but as already
stated I have forgot about the possibility to use __eq__().
In Python the built in '==' operator (when not manipulated in own code)
behaves not as the '==' operator e.g. in C or Javascript, because it
iterates over arrays (i.e. lists) doing many comparisons instead of
comparing only two 'values'. Coming from C or Javascript one would
expect '==' to compare the 'pointers' to the arrays and not to iterate
over all elements of the lists.
With the solution to the question above I intended to have an example of
Python code which outcome is an endless loop and the problem causing it
very hard to find if one thinks in terms of C or Javascript when
considering lists (as arrays) and the function of '==' operator.
Claudio
More information about the Python-list
mailing list