John Machin wrote: > On Aug 3, 8:55 am, Ian Clark <[EMAIL PROTECTED]> wrote: >> Stef Mientki wrote: >>> hello, >>> I discovered that boolean evaluation in Python is done "fast" >>> (as soon as the condition is ok, the rest of the expression is ignored). >>> Is this standard behavior or is there a compiler switch to turn it on/off ? >>> thanks, >>> Stef Mientki >> It's called short circuit evaluation and as far as I know it's standard >> in most all languages. This only occurs if a conditional evaluates to >> True and the only other operators that still need to be evaluated are >> 'or's or the condition evaluates to False and all the other operators >> are 'and's. The reason is those other operators will never change the >> outcome: True or'd with any number of False's will still be True and >> False and'ed to any number of Trues will still be False. >> >> My question would be why would you *not* want this? >> >> > > Why? Perhaps under some compound condition like this: > > (you_are_confused and/or > function_returns_bool_but_has__side_effects()) >
Thanks guys, Yes this is exactly what's going wrong ... Sorry, my question missed the essential "NOT", here is an example, that behaves different in Delphi, (so I guess Delphi is not a real language ;-) <Python> def Some_Function (const): print 'Ive been here', const return True A = True if A and Some_Function (4 ): print 'I knew it was True' else: print 'I''ll never print this' </Python> <Output> Ive been here 4 I knew it was True </Output I was expected that the function would not be called, because A is True. And I agree with Laurent that it should be better to write a clean code, so it doesn't matter whether you write in Python or in Delphi. Gabriel: you pointed me to this page: The exact behavior is defined in the Language Reference <http://docs.python.org/ref/Booleans.html> <quote> or_test ::= and_test | or_test "or" and_test </quote Can you imagine, while I'm not a programmer, just a human, that I don't understand one bit of this line. So now I'm left with just one question: for bitwise operations I should use &, |, ^ for boolean operations I should use and, or, xor but after doing some test I find strange effects: >>> A = 4 >>> B = 5 >>> A and B 5 >>> A & B 4 >>> A or B 4 >>> A | B 5 So if I use the bitwise operation on integers, "and" changes into (bitwise) "or" and vise versa. Is there some way to prevent / detect these kind of errors ( as I'm building a micro-controller simulator in Python, I need both logical and bitwise operators very frequently). cheers, Stef Mientki -- http://mail.python.org/mailman/listinfo/python-list