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 -- http://mail.python.org/mailman/listinfo/python-list