In article <5f101d70-e51f-4531-9153-c92ee2486...@googlegroups.com>, Ahmed Abdulshafy <abdulsh...@gmail.com> 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