2010-01-06 2 views

답변

40

제어 흐름 구조이기 때문에. 특히 : and에 왼쪽 인수가 False로 평가되면

  • , 오른쪽 인자가 or에 왼쪽 인수가 True로 평가되면 모든
  • 에서 평가되지 않습니다 오른쪽 인수에서 평가되지 않습니다 모든

따라서, 단순히 예약어되는 문제가 아니다. 연산자는 항상 모든 인수를 평가하기 때문에 연산자와 같이 작동하지 않습니다.

보시다시피
>>> 1 | (1/0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ZeroDivisionError: integer division or modulo by zero 
>>> 1 or (1/0) 
1 

, 비트 OR (|가) 평가를 모두 인수 :

당신은 이름에서 알 수 있듯이, 사업자이며, 비트 이항 연산자로이 대조 할 수 있습니다. 그러나 or 키워드는 왼쪽 인수가 참으로 평가 될 때 오른쪽 인수를 평가하지 않습니다. 그렇기 때문에 두 번째 명령문에서는 ZeroDivisionError이 발생하지 않습니다.

+12

C에서'&&'와'||'는 단락 중일지라도 (왼쪽 값에 따라 오른쪽을 평가하지 마십시오) "연산자"라고합니다. 일부 다른 언어의 경우도 마찬가지입니다. –

+1

예, 용어가 다를 수 있다는 것에 동의합니다. 요점은 파이썬이 일반적으로 연산자라고 부르는 것과는 근본적으로 다른 특성을 가지고 있다는 점입니다. –

0

그들은 이전에 문서로 키워드를 분류하고 있습니다.

+3

사실, 그렇다고해서 변수 이름으로 사용할 수없는 것이 아닙니다. –

+0

OP와 연결된 URL은 어휘 분석과 관련이 있으며, 어휘 적으로 키워드이며 운영자가 아닙니다. 질문이 구문 중 하나로 표현 된 경우 아래쪽 투표가 의미가 있습니다. – Jacob

0

기호의 특수 토큰이 아닌 예약 식별자이기 때문에 keywords입니다.

0

유형별 연산을 지원하기 위해 재정의 할 수 없으므로 다른 연산자의 범위에 속하지 않습니다.

+2

나는 귀하의 인과 관계가 잘못되었다고 생각합니다. 연산자가 아니기 때문에 유형별 연산을 지원하도록 재정의 할 수 없습니다. –

6

파이썬은 현재의 '와'에 해당하는 모든 'XXX'특별한 방법을 제공하는 '나'와 '하지'부울 연산자하지 않습니다. 'and'및 'or'의 경우, 가장 가능성있는 이유는 이들 연산자가 단락 의미론을 갖는다는 것, 즉 결과가 제 1 피연산자로부터 결정될 수 있다면 제 2 피연산자는 평가되지 않는다는 것이다. 따라서 이러한 작업자를위한 특별한 방법을 제공하는 일반적인 기술은 작동하지 않습니다.

출처 : PEP 335

PEP 335 개 overloadable 사업자가 할 수있는 기능을 추가하는 방법에 대한 이야기,이 문제를 조금에 대해 설명합니다.

관련 문제