파이썬의 파워 오퍼레이터가 오른쪽에 연관시키는 것에 대한 정당성은 무엇입니까?


9

수학 표현식 문자열을 구문 분석하는 코드를 작성하고 있는데, 파이썬에서 연쇄 전력 연산자가 평가되는 순서가 Excel의 순서와 다르다는 것을 알았습니다.

에서 http://docs.python.org/reference/expressions.html :

"따라서 괄호로 묶지 않은 일련의 거듭 제곱 연산자와 단항 연산자에서 연산자는 오른쪽에서 왼쪽으로 평가됩니다 (이는 피연산자에 대한 평가 순서를 제한하지 않습니다) : -1 * 2 -1이됩니다."*

이것은 파이썬에서 다음 2**2**3과 같이 평가됨을 의미합니다. 2**(2**3) = 2**8 = 256

Excel에서, 그것은 주변의 다른 방법으로 작동합니다 2^2^3으로 평가(2^2)^3 = 4^3 = 64

이제 내 파서에 대한 구현을 선택해야합니다. 곱셈의 평가 순서를 반영하므로 Excel 순서는 구현하기가 더 쉽습니다.

나는 사무실 주위의 어떤 사람들에게 장의 느낌이 어떤지 평가 2^2^3하고 혼합 된 반응을 얻었 는지 물었다 .

파이썬 구현을 선호하는 좋은 이유나 문제를 아는 사람이 있습니까? 그리고 당신은 결과에, 제발 의견에 대한 답변이없는 경우 창자 느낌에서 얻을 - 64256?


구현하기가 그리 어렵지 않습니다. 어쨌든 파서는 할당과 같은 방식으로 올바른 연관성을 지원해야합니다.
marco-fiset

예, 실제로 구현되지 않았습니다. 그러나 내 라이브러리의 주요 용도 중 하나는 방정식을 Excel로 내보내는 것이기 때문에 Excel 규칙으로 되돌아 갔으므로 방정식이 작동하는 방식을 고수하는 것이 더 합리적입니다.
Pieter Müller

답변:


10

수학에서 누적 지수가 위에서 아래로 적용되는 이유는 지수의 곱셈을 얻는 다른 방법이기 때문입니다.

(((2^3)^4)^5) = 2^(3 * 4 * 5)

당신의 대답은 분명하지 않지만 ... 그 맥락에서 지수가 어떻게 작동 합니까? ((2 ^ 3) ^ 4) = 8 ^ 4 = (2 ^ 3) * (2 ^ 3) * (2 ^ 3) * (2 ^ 3) = 2 ^ (3 + 3 + 3 + 3) = 2 ^ 12
Pureferret

3
네 그렇습니다. 내 요점은 당신이 선택할 수있는 두 가지 주문 중 하나이며, 하나는 지수를 쌓지 않고 쓸 수있는 것을 산출합니다. 흥미로운 연관성은 다른 것입니다.
Andrea

14

Wikipedia (및 수학 교사)는 다음과 같이 말합니다. 누적 지수는 위에서 아래로 적용됩니다.

이것은 파이썬이 그것을 평가하는 방식을 반영합니다. 마이크로 소프트가 틀렸다 (한 번 더)

그리고 Ruby는 그것을 파이썬으로 평가하므로 Matz가 잘못 될 수 없기 때문에 의심의 여지가 없습니다.


4
올바른 연관성을 지원 하는 연산자의 D 언어 구현에 관한 이 흥미로운 게시물을 참조하십시오 .
Pedro Romano

Visual Basic과 동일한 방식으로 평가하는 것을 기억하지만 이것이이 방법에 신뢰성을 추가하는지 여부는 확실하지 않습니다. ;)
Xion

Microsoft는 다음과 같이 주장하는 일부 사양을 준수하지 않는 경우에만 "잘못된"상태입니다. 언어마다 수학 연산이 다르게 평가됩니다. APL이 올바르게 기억되면 모든 작업을 올바르게 연관 시켰습니다. 다른 사양과의 불일치는 성가 시지만 반드시 "잘못"되는 것은 아닙니다.
Keith Thompson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.