답변:
and
, or
:먼저 무언가가 실행되는지 여부를 결정하는 유용한 함수를 정의 해 봅시다. 인수를 허용하고 메시지를 인쇄 한 후 입력을 변경없이 반환하는 간단한 함수입니다.
>>> def fun(i):
... print "executed"
... return i
...
하나는 관찰 할 수 파이썬의 단락 행동 의 and
, or
다음 예에서 연산자를 :
>>> fun(1)
executed
1
>>> 1 or fun(1) # due to short-circuiting "executed" not printed
1
>>> 1 and fun(1) # fun(1) called and "executed" printed
executed
1
>>> 0 and fun(1) # due to short-circuiting "executed" not printed
0
참고 : 다음 값은 인터프리터에서 false를 의미하는 것으로 간주됩니다.
False None 0 "" () [] {}
any()
, all()
:파이썬 any()
과 all()
함수도 단락을 지원합니다. 문서에 표시된 것처럼; 평가의 조기 종료를 허용하는 결과를 찾을 때까지 순서의 각 요소를 순서대로 평가합니다. 아래 예제를 고려하여 두 가지를 모두 이해하십시오.
이 함수 any()
는 요소가 True인지 확인합니다. True가 발생하자마자 실행을 중지하고 True를 반환합니다.
>>> any(fun(i) for i in [1, 2, 3, 4]) # bool(1) = True
executed
True
>>> any(fun(i) for i in [0, 2, 3, 4])
executed # bool(0) = False
executed # bool(2) = True
True
>>> any(fun(i) for i in [0, 0, 3, 4])
executed
executed
executed
True
이 함수 all()
는 모든 요소가 True인지 확인하고 False가 발생하자마자 실행을 중지합니다.
>>> all(fun(i) for i in [0, 0, 3, 4])
executed
False
>>> all(fun(i) for i in [1, 0, 3, 4])
executed
executed
False
또한 파이썬에서
비교는 임의로 연결될 수 있습니다 . 예를 들어,
x < y <= z
동일합니다x < y and y <= z
것을 제외하고,y
(그러나 두 경우에 한 번만 평가z
때 전혀 평가되지 않습니다x < y
허위로 발견된다).
>>> 5 > 6 > fun(3) # same as: 5 > 6 and 6 > fun(3)
False # 5 > 6 is False so fun() not called and "executed" NOT printed
>>> 5 < 6 > fun(3) # 5 < 6 is True
executed # fun(3) called and "executed" printed
True
>>> 4 <= 6 > fun(7) # 4 <= 6 is True
executed # fun(3) called and "executed" printed
False
>>> 5 < fun(6) < 3 # only prints "executed" once
executed
False
>>> 5 < fun(6) and fun(6) < 3 # prints "executed" twice, because the second part executes it again
executed
executed
False
편집 :
참고로 한 가지 더 흥미로운 점 : - 논리는 and
,or
파이썬에서 연산자는 피연산자의 반환 값 대신 부울 (의 True
또는 False
). 예를 들면 다음과 같습니다.
작업
x and y
결과if x is false, then x, else y
다른 언어와 달리 &&
, 예를 들어 , ||
0 또는 1을 반환하는 C의 연산자.
예 :
>>> 3 and 5 # Second operand evaluated and returned
5
>>> 3 and ()
()
>>> () and 5 # Second operand NOT evaluated as first operand () is false
() # so first operand returned
마찬가지로 or
연산자는 단락 동작에 따라 bool(value)
== 를 제외한 가장 왼쪽 값을 반환 True
합니다 (예 : 단락 동작에 따라).
>>> 2 or 5 # left most operand bool(2) == True
2
>>> 0 or 5 # bool(0) == False and bool(5) == True
5
>>> 0 or ()
()
그렇다면 어떻게 유용합니까? Practical Python 에서 사용 된 한 가지 사용 예 : Magnus Lie Hetland :
사용자가 자신의 이름을 입력해야하지만 아무 것도 입력하지 않을 수 있습니다.이 경우 기본값을 사용하려고합니다 '<unknown>'
. if 문을 사용할 수는 있지만 간결하게 설명 할 수도 있습니다.
In [171]: name = raw_input('Enter Name: ') or '<Unkown>'
Enter Name:
In [172]: name
Out[172]: '<Unkown>'
즉, raw_input의 리턴 값이 true 인 경우 (빈 문자열 아님) name에 지정됩니다 (변경 사항 없음). 그렇지 않으면 기본값 '<unknown>'
이로 지정됩니다 name
.
0
(그냥하지 그래서 falsy입니다 0
, 그건 0.0
, 0j
, decimal.Decimal(0)
, fractions.Fraction(0)
, 등), 모든 컬렉션 길이있다 0
(그래서 당신이 나와 무슨의 위에, b''
[Py3], u''
[Py2가] 및 set()
/ frozenset()
있습니다 허위로 평가되는 모든 내장 기능이지만 사용자 정의 / 타사 유형은 직접 정의 할 수 있습니다 ( __bool__
[Py3] / __nonzero__
[Py2]를 사용하여 직접 또는 간접적으로 정의 __len__
).