[python] 파이썬은 단락을 지원합니까?

파이썬은 부울 식에서 단락을 지원합니까?



답변

그렇습니다. and그리고 or작업자 단락 모두 문서를 참조하십시오 .


답변

연산자의 동작을 쇼트 – 단락 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.


답변

예. 파이썬 인터프리터에서 다음을 시도하십시오.

>>>False and 3/0
False
>>>True and 3/0
ZeroDivisionError: integer division or modulo by zero

또는

>>>True or 3/0
True
>>>False or 3/0
ZeroDivisionError: integer division or modulo by zero


답변