开发者

"if var and var2 == getSomeValue()" in python - if the first is false, is the second statement evaluated?'

开发者 https://www.devze.com 2023-03-10 11:00 出处:网络
I have some code like this: if var: if var2 == getSomeValue() This could be in a single expression. if var and var2 == getSomeValue():

I have some code like this:

if var:
    if var2 == getSomeValue()

This could be in a single expression.

if var and var2 == getSomeValue():

...but getSomeValue() can only be called if var is True.

So, when callin开发者_JAVA百科g if var and var2 == getSomeValue(), are both evaluated by the interpreter, or the evaluation stops at var if False? Where I can find this information on python documentation? (I didn't know what to search...:/ )


This is called short-circuiting, and Python does it, so you're good.

UPDATE: Here's a quick example.

>>> def foo():
...     print "Yay!"
... 
>>> if True and foo() is None:
...     print "indeed"
... 
Yay!
indeed
>>> if False and foo() is None:
...     print "nope"
... 

UPDATE 2: Putting the relevant PEP (308) in my answer so it doesn't get overlooked in the excellent comment from @Somebody still uses you MS-DOS.


The second item isn't evaluated - you could verify this with a simple program:

def boo():
  print "hi"
  return True

a = False
b = True

if a and b == boo():
  print "hi2"

Running it produces no output, so you can see that boo() is never called.


If var is False, evaluation stops.

See the Short-Circuit Behavior section in PEP 308.


The evaluation getSomeValue won't be evaluated:

var = False
if var and foo():
   print "here"
else:
   print "there"

def foo():
   print "In foo"
   return False


The Python documentation says that and and or are short-circuiting, so no, var2 == getSomeValue() won't be evaluated if var is false.


Re "I didn't know what to search"

You don't need to search when there's an index available:

Browse to the Python home page. Successively click on

  • DOCUMENTATION
  • Current Docs
  • index (it's in the top right corner)
  • A

Scroll down until you see

and
    bitwise
    operator

You don't want bitwise, click on operator.

If you are on Windows, you have the manuals on your computer, with a nice-enough GUI interface. Check out the Contents / Index / Search / Favorites panes near the top left corner.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号