In article <[email protected]>,
Ahmed Abdulshafy <[email protected]> wrote:
> Hi,
> I'm having a hard time wrapping my head around short-circuit logic that's
> used by Python, coming from a C/C++ background; so I don't understand why the
> following condition is written this way!>
>
> if not allow_zero and abs(x) < sys.float_info.epsilon:
> print("zero is not allowed")
>
> The purpose of this snippet is to print the given line when allow_zero is
> False and x is 0.
I don't understand your confusion. Short-circuit evaluation works in
Python exactly the same way it works in C. When you have a boolean
operation, the operands are evaluated left-to-right, and evaluation
stops as soon as the truth value of the expression is known.
In C, you would write:
if (p && p->foo) {
blah();
}
to make sure that you don't dereference a null pointer. A similar
example in Python might be:
if d and d["foo"]:
blah()
which protects against trying to access an element of a dictionary if
the dictionary is None (which might happen if d was an optional argument
to a method and wasn't passed on this invocation).
But, none of that applies to your example. The condition is
not allow_zero and abs(x) < sys.float_info.epsilon:
it's safe to evaluate "abs(x) < sys.float_info.epsilon" no matter what
the value of "not allow_zero". For the purposes of understanding your
code, you can pretend that short-circuit evaluation doesn't exist!
So, what is your code doing that you don't understand?
--
http://mail.python.org/mailman/listinfo/python-list