2013-08-24 2 views
4

연산자 우선 순위는 문자열에서 숫자와 동일한 방식으로 작동합니까? 코드 골프가 나는 독특한 문제에 발견하는 동안

>>> print '%'+'-+'[1]+str(5)+'s'%'*' 

Traceback (most recent call last): 
    File "<pyshell#178>", line 1, in <module> 
    print '%'+'-+'[1]+str(5)+'s'%'*' 
TypeError: not all arguments converted during string formatting 

내 가정은 운영자의 평가는 왼쪽에서 오른쪽으로 발생했지만,이 특별한 경우에는, 비록 그 문자열 조작, %takes priority over+과가 시도 할 것 연결 전에 's'%'*'을 평가하고 실패합니다.

이것은 알려진 문서화 된 동작입니까, 아니면 나에게 분명하지 않은 것이 있습니다.

답변

4

예, 문서 번호는 here입니다.

우선 순위는 작업 대상에 관계없이 언어 전체에서 일관됩니다. 다른 연산자는 임의의 동작을 사용하여 %, __mod__()과 같이 '연산자'특수 메서드를 사용하여 개체를 구성 할 수 있으므로 혼란 스러울 수 있습니다. 객체가 자체 선행 규칙을 정의 할 수도있는 경우 예기치 않은 결과를 디버깅하는 것이 훨씬 어려워집니다.

+1

+1 "기타는 끔찍하게 혼란 스럽습니다" –

+0

+1 문서 링크 – Abhijit