2012-05-25 3 views
16

내가 관리해야 프로젝트의 파이썬 코드의 다음 비트가있다 :더하기 기호는 파이썬에서 변수 앞에 무엇을합니까?

# If the `factor` decimal is given, compute new price and a delta 
factor = +factor.quantize(TWOPLACES) 
new_price = +Decimal(old_price * factor).quantize(TWOPLACES) 
delta = new_price - old_price 

여기서 문제는 변수 앞에 +의 목적이다.

파이썬 워드 프로세서 call단항 더하기 연산자 "숫자 인자를 변경하지 않음". 그러면 안전하게 제거 할 수 있습니까?

(덧붙여 말하자면,이 코드는 필자가 이전에 저에게 썼습니다. 잘하면 테스트를 실시했거나 10 진수의 단항 플러스 사용이 주석에 명확하게 설명되어 있다면 문제가되지 않을 것입니다. .)

+2

제거하면 어떻게됩니까? –

+1

명백한 것은 없지만 민감한 숫자 정보 (제품 가격 책정)를 다루기 때문에 확실하게 알고있는 것이 좋습니다. 아아, 관련 테스트가 누락되었습니다. – Tony

+0

확실한 목적이 있습니다. 나는 그 해답을 알지 못하지만, 즉각적이고 눈에 띄는 차이가 있다면 나는 궁금했다. –

답변

18

더하기 기호는 해당 표현식의 결과에 따라 정의 된 내용 (해당 개체의 __pos__() 메서드가 호출 됨)에 따라 다릅니다. 이 경우 Decimal 개체이고 단항 더하기는 plus() 메서드를 호출하는 것과 같습니다. 기본적으로 숫자의 부호를 변경하지 않고 현재 컨텍스트 (정밀도, 반올림 등)를 적용하는 데 사용됩니다. 컨텍스트가 무엇인지 알아 보려면 setcontext() 또는 localcontext()을 찾아보십시오. 자세한 내용은 see here을 참조하십시오.

단항 플러스는 자주 사용되지 않으므로이 사용법은 익숙하지 않습니다. 제 생각에는 decimal 모듈이 그것을 사용하는 유일한 표준 모듈이라고 생각합니다.

+0

고마워! 실제로 모듈의 시작 부분에 setcontext (Context (rounding = ROUND_UP)) 호출이 존재합니다. – Tony

2

파이썬이 C 증가 (++) 연산자를 지원해야한다고 잘못 가정했을 때도 이와 동일한 문제가 발생했습니다. 그것은하지 않습니다! 대신, 더하기 부호 연산자 (+)를 두 번 적용합니다! 어느 것이 두 번이나, 나는 곧 배웠다. 그러나 "++ n"이 유효하다고 보았 기 때문에 ... 구문 오류로 표시되지 않았습니다 ... 나는 나 자신을 위해 끔찍한 버그를 만들었습니다.

그래서 무엇을 다시 정의하지 않으면 unary +는 실제로 아무 것도하지 않습니다. 단항 - 양수에서 음수로 또는 그 반대로 바뀌므로 "- n"도 구문 오류로 플래그되지는 않지만 아무것도 수행하지 않습니다.

관련 문제