Kay Schluehr schrieb: > On Oct 7, 4:48 pm, Dekker <[EMAIL PROTECTED]> wrote: >> On 7 Okt., 16:19, Steven D'Aprano <[EMAIL PROTECTED] >> >> cybersource.com.au> wrote: >>> On Sun, 07 Oct 2007 13:52:15 +0000, Dekker wrote: >>>> Is it possible to override 'and' and/or 'or'? >>> Not without hacking the Python source code, in which case what you've got >>> is no longer Python. >>> Why do you want to do so? >>> -- >>> Steven. >> Well I think it is not possible what I wanted to achieve. By >> overriding the "and" and "or" keyword I wanted to return a new object: >> >> SqlValueInt(4) and SqlValueInt(5) --> SqlOpAnd(SqlValueInt(4), >> SqlValueInt(5)) >> >> This is only possible for: +, -, /, *, >, >=, ... >> >> Well... I have to live with the (binary) __and__, __or__ option and >> the user has to write: >> >> SqlValueInt(4) & SqlValueInt(5) --> SqlOpAnd(SqlValueInt(4), >> SqlValueInt(5)) >> >> Thanks for your input, but __nonzero__ is not of any help in this >> case... I want to abuse the "magic" functions for some transformations >> and not some evaluation. >> >> Marco > > You can see what "and" and "or" are actually doing: > > import dis > dis.dis(lambda: x or y and z) > > 1 0 LOAD_GLOBAL 0 (x) > 3 JUMP_IF_TRUE 11 (to 17) > 6 POP_TOP > 7 LOAD_GLOBAL 1 (y) > 10 JUMP_IF_FALSE 4 (to 17) > 13 POP_TOP > 14 LOAD_GLOBAL 2 (z) > >> 17 RETURN_VALUE > > Here you can see nicely that they are not implemented as specialized > opcodes but being compiled to jumps. This causes their lazy nature. If
Very cool, didn't know that. Diez -- http://mail.python.org/mailman/listinfo/python-list