Я переживаю LPTHW, и я наткнулся на то, что не могу понять. Когда вам когда-нибудь понадобится, чтобы ваш логический and
или or
возвращал нечто, отличное от логического? В тексте LPTHW указано, что все языки, такие как python, имеют такое поведение. Имеет ли он смысл интерпретировать или скомпилированные языки или утку, типизированную по сравнению с статическими типизированными языками?
Я запустил следующий код:
>>> False and 1
False
>>> True and 1
1
>>> 1 and False
False
>>> 1 and True
True
>>> True and 121
121
>>> False or 1
1
>>> False or 112
112
>>> False or "Khadijah"
'Khadijah'
>>> True and 'Khadijah'
'Khadijah'
>>> False or 'b'
'b'
>>> b = (1, 2, "K")
>>> b
(1, 2, 'K')
>>> False or b
(1, 2, 'K')
>>>
Пожалуйста, помогите мне понять, что происходит здесь.
Согласно документации: http://docs.python.org/2/library/stdtypes.html
Операции и встроенные функции, которые имеют логический результат, всегда возвращают 0
или False
для false и 1
или True
для true, если не указано иное. (Важное исключение: логические операции or
и and
всегда возвращают один из их операндов.)
Согласно LPTHW: http://learnpythonthehardway.org/book/ex28.html
Почему "test" and "test"
возвращает "test" или 1 and 1
возвращает 1 вместо True?
Python и многие другие языки возвращают один из операндов в их логические выражения, а не только True или False. Это означает, что если вы сделали False и 1, вы получите первый операнд (False), но если вы сделаете True и 1, получите второй (1). Играйте с этим немного.