Others have explained how the expression you're asking about is evaluated. An important thing to know is that if the first operand of the "and" operator evaluates to false, the second one is never evaluated, because the result of "and" is always false if one operand is false, and if you know the first operand is false, then the whole "and" is false and you don't have to evaluate the second. This is called "short-circuiting" and applies to "or" as well as "and" (except that "or" is always true when either operand is true, so the second operand is evaluated only when the first is false).
The other thing you need to know is that the result of the whole "and" operation is the value of the last operand evaluated. Since things other than the literal constants True and False are considered logically true or false, this fact (combined with short-circuiting) can be used as a substitute for "if" statements in some situations, and you will occasionally see it used that way.
For example, "x or y" evaluates to x if x is true, but to y if x is false. Sometimes this is used to provide defaults for missing values:
name = raw_input("Enter your name: ") or "dude"
print "Hello, %s!" % name
If you don't enter anything at the prompt, just hit Enter, the return value of raw_input is the empty string, "", which is considered false. Since the left branch of the "or" is false, it doesn't short-circuit, and the right branch is evaluated, so the result of the "or" is "dude." If you do enter a value at the prompt, the right branch never gets evaluated, due to short-circuiting, and so the value of the "or" is whatever you entered.
A lot of people consider abusing Boolean operators this way to be poor style now that Python has "x if y else z," but this particular use strikes me as readable enough. (But this is about the only one!) "The value is this, or that if it's empty." Compare it to the following:
name = raw_input("Enter your name: ")
name = name if name else "dude"
print "Hello, %s!" % name