2012-08-04 6 views
9

일부 파이썬 연산자 인 arithmetic 및 boolean이 오버로드되었습니다. 파이썬 우선 순위 규칙은 계속 유효합니다. 오버로드 된 연산자가 부자연 스럽기 때문에 식에서 많은 괄호가 사용됩니다. 파이썬의 우선 순위를 "과부화"할 수있는 방법이 있습니까?파이썬에서 연산자 우선 순위 변경

+5

아니요. 파이썬 언어 자체의 일부입니다. 그게 어떻게 언어 구문 분석. – jdi

+1

@jdi 그 대답은, 왜 그것을 하나 만들지 않습니까? – kojiro

+0

@kojiro : 공식 파이썬 문서에 대한 링크를 찾을 수 없어서 변경 될 수 없다는 사실을 알았 기 때문입니다. 나는 그것의 제 3 자 연결의 톤을 찾아 냈다. – jdi

답변

8

아니요. 파이썬 언어 자체의 일부입니다. 그게 어떻게 언어 구문 분석.

공식 인용 : Evaluation order

파이썬은 왼쪽에서 오른쪽으로 식을 평가합니다. 할당을 평가하는 동안 이 표시되는 동안 오른쪽은 왼쪽에서 평가됩니다.

다른 지수 :

Python:Basics:Numbers and operators

혼합 연산자 수학적 연산을 수행하는 것이 파이썬 미리 결정된에 기초 먼저 수행하는 동작 판정 유의하는 것이 중요 인 상위. 이 우선 순위는 대부분의 프로그래밍 언어와 비슷한 우선 순위 인 을 따릅니다. 파이썬은 PEMDAS order of operations을 준수하는 것이 Python Programming/Operators

참고.

+6

주된 문제는 python이 코드를 파싱하는 동안 연산자 우선 순위를 적용한다는 것입니다.초기 단계에서 파이썬은 코드가 아직 실행되지 않았기 때문에 객체가 실제로 표현에 포함 된 유형을 알 수 없습니다. 따라서 연산자 우선 순위를 변경할 수 있다면 일반적인 수학 표현식을 비롯한 모든 표현식에서이를 수행 할 수 있습니다. 가능하다면 표준 라이브러리와 제 3 자 라이브러리에서 어떤 종류의 혼란이 일어날 지 상상해보십시오. – liori

+0

@liori : 멋진 추가! 동일한 변경된 인터프리터에서 자신과 섞인 제 3 자 코드를 사용할 수 없습니다. – jdi

+0

jdi는 Python이하는 일을 말하는 것이 아니라 왜 내가하고 싶은 일을 할 수 없는지 설명해 주셔서 감사합니다. –

6

는이 방법으로 그 메커니즘을 속일 수

  1. 재정 계산을하지 모든 연산자를하지만 어떤 객체에 싸여 지침의 목록을 만들 수 있습니다.
  2. 직접 브래킷 연산자 (예 : _ 함수)를 추가하십시오.

예 :

>>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3) 
>>> a + b * c 
MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)]) 

브래킷 : _ 그래서 당신이 priorites 리버스 경우

(주문 당신이 그것에 시행에) 식을 계산하는 기능입니다

>>> a + _(b * c) 

하는 것으로 당신은 얻을 것이다 :

>>> _(a + b * c) 
MyNumber(21) 

추신. Django는 QF 연산자를 사용하여 비슷한 트릭을 수행합니다.

관련 문제