Да, 4.2 напрягает мозг и заставляет лезть в документацию :-)
result = test and 'Test is True' or 'Test is False'
Сначала нужно определиться с приоритетом логических операторов (http://docs.python.org/library/stdtypes.html#boolean-operations-and-or-not). В порядке убывания он такой — not, and, or. Значит выражение можно записать так:
result = (test and 'Test is True') or 'Test is False'
Теперь нужно понять, как интерпретируются значения операндов в контексте логических операторов (http://docs.python.org/reference/expressions.html#boolean-operations). Из первого абзаца становится ясно, что False, None, 0, 0.0, '', (), [], {}, set() интерпретируется как ложь, все остальное как истина. Значит, строки 'Test is True' и 'Test is False' интерпретируются как истина.
test = True
Читаем 3 абзац в последней ссылке и понимаем, что в случае выражения test and 'Test is True', если оба аргумента интерпретируются как истина, то оператор вернет значение второго аргумента, то есть строку 'Test is True'.
Из четвертого абзаца в той же ссылке понимаем, что 'Test is True' or 'Test is False' вернет значение первого аргумента, т.е. 'Test is True'.
test = False
test and 'Test is True' вернет False без заморочек, а False or 'Test is False' конечно второй аргумент, 'Test is False'
Да, про то, что логические операторы возвращают не True и False, а значения самих операндов, написано в последнем абзаце в той же ссылке.
result = test and 'Test is True' or 'Test is False'
Сначала нужно определиться с приоритетом логических операторов (http://docs.python.org/library/stdtypes.html#boolean-operations-and-or-not). В порядке убывания он такой — not, and, or. Значит выражение можно записать так:
result = (test and 'Test is True') or 'Test is False'
Теперь нужно понять, как интерпретируются значения операндов в контексте логических операторов (http://docs.python.org/reference/expressions.html#boolean-operations). Из первого абзаца становится ясно, что False, None, 0, 0.0, '', (), [], {}, set() интерпретируется как ложь, все остальное как истина. Значит, строки 'Test is True' и 'Test is False' интерпретируются как истина.
test = True
Читаем 3 абзац в последней ссылке и понимаем, что в случае выражения test and 'Test is True', если оба аргумента интерпретируются как истина, то оператор вернет значение второго аргумента, то есть строку 'Test is True'.
Из четвертого абзаца в той же ссылке понимаем, что 'Test is True' or 'Test is False' вернет значение первого аргумента, т.е. 'Test is True'.
test = False
test and 'Test is True' вернет False без заморочек, а False or 'Test is False' конечно второй аргумент, 'Test is False'
Да, про то, что логические операторы возвращают не True и False, а значения самих операндов, написано в последнем абзаце в той же ссылке.