일부 파이썬 연산자 인 arithmetic 및 boolean이 오버로드되었습니다. 파이썬 우선 순위 규칙은 계속 유효합니다. 오버로드 된 연산자가 부자연 스럽기 때문에 식에서 많은 괄호가 사용됩니다. 파이썬의 우선 순위를 "과부화"할 수있는 방법이 있습니까?파이썬에서 연산자 우선 순위 변경
답변
아니요. 파이썬 언어 자체의 일부입니다. 그게 어떻게 언어 구문 분석.
공식 인용 : Evaluation order
파이썬은 왼쪽에서 오른쪽으로 식을 평가합니다. 할당을 평가하는 동안 이 표시되는 동안 오른쪽은 왼쪽에서 평가됩니다.
다른 지수 :
Python:Basics:Numbers and operators
혼합 연산자 수학적 연산을 수행하는 것이 파이썬 미리 결정된에 기초 먼저 수행하는 동작 판정 유의하는 것이 중요 인 상위. 이 우선 순위는 대부분의 프로그래밍 언어와 비슷한 우선 순위 인 을 따릅니다. 파이썬은 PEMDAS order of operations을 준수하는 것이 Python Programming/Operators
참고.
주된 문제는 python이 코드를 파싱하는 동안 연산자 우선 순위를 적용한다는 것입니다.초기 단계에서 파이썬은 코드가 아직 실행되지 않았기 때문에 객체가 실제로 표현에 포함 된 유형을 알 수 없습니다. 따라서 연산자 우선 순위를 변경할 수 있다면 일반적인 수학 표현식을 비롯한 모든 표현식에서이를 수행 할 수 있습니다. 가능하다면 표준 라이브러리와 제 3 자 라이브러리에서 어떤 종류의 혼란이 일어날 지 상상해보십시오. – liori
@liori : 멋진 추가! 동일한 변경된 인터프리터에서 자신과 섞인 제 3 자 코드를 사용할 수 없습니다. – jdi
jdi는 Python이하는 일을 말하는 것이 아니라 왜 내가하고 싶은 일을 할 수 없는지 설명해 주셔서 감사합니다. –
는이 방법으로 그 메커니즘을 속일 수
- 재정 계산을하지 모든 연산자를하지만 어떤 객체에 싸여 지침의 목록을 만들 수 있습니다.
- 직접 브래킷 연산자 (예 :
_
함수)를 추가하십시오.
예 :
>>> 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는 Q
및 F
연산자를 사용하여 비슷한 트릭을 수행합니다.
아니요. 파이썬 언어 자체의 일부입니다. 그게 어떻게 언어 구문 분석. – jdi
@jdi 그 대답은, 왜 그것을 하나 만들지 않습니까? – kojiro
@kojiro : 공식 파이썬 문서에 대한 링크를 찾을 수 없어서 변경 될 수 없다는 사실을 알았 기 때문입니다. 나는 그것의 제 3 자 연결의 톤을 찾아 냈다. – jdi