Pull to refresh
0
0
Алексей Кузьминич @akuzminich

User

Send message
Да, 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, а значения самих операндов, написано в последнем абзаце в той же ссылке.
Думаю, что популярность и деньги как-то связаны. Они видимо знают, как :-)

Information

Rating
Does not participate
Location
Иркутская обл., Россия
Registered
Activity