왜 파이썬에 sign
함수 가 없는지 이해할 수 없습니다 . 그것은 abs
(내 sign
동생 이라고 생각) 내장되어 있지만 없습니다 sign
.
파이썬 2.6에는 copysign
함수 ( math )가 있지만 부호는 없습니다. 왜 copysign(x,y)
당신이 그냥 쓸 sign
수 있고 copysign
직접에서 얻을 수있을 때 쓰는 것을 귀찮게 abs(x) * sign(y)
합니까? 후자는 훨씬 더 명확합니다 : x는 y의 부호가있는 반면 copysign은 x가 y의 부호 또는 x의 부호가있는 경우 x를 기억해야합니다!
분명히 sign(x)
더 많은 것을 제공하지는 않지만 이것보다 cmp(x,0)
훨씬 더 읽기 쉽습니다 (파이썬과 같이 크게 읽을 수있는 언어의 경우 큰 장점이었습니다).
만약 내가 파이썬 디자이너라면, 다른 방법은 없을 것입니다 : cmp
내장이 아니라 a sign
. 필요할 때 (또는 숫자가 아닌 것들, x> y 만 더 잘 cmp(x,y)
할 수 있습니다 sign(x-y)
-물론 sorted
정수 비교기 대신 부울을 수락 해야합니다 ). 긍정적 인 경우 x>y
( 첫 번째 가 클cmp
때 긍정적 인 협약을 기억해야 하지만 반대 방향 일 수 있음) 더 명확 합니다. 물론 다른 이유로 (예를 들어 숫자가 아닌 것을 정렬 할 때 또는 정렬을 안정적으로 만들고 싶을 때 부울과 함께 사용할 수없는 경우) 자체적으로 의미가 있습니다.cmp
그렇다면 문제는 왜 파이썬 디자이너가 sign
함수를 언어 에서 벗어나기로 결정 했는가하는 것입니다. 도대체 왜 copysign
부모가 sign
아닌가?
뭔가 빠졌습니까?
편집-Peter Hansen 의견 후. 당신이 그것을 사용하지 않을 정도로 공평하지만 파이썬을 무엇에 사용하는지 말하지 않았습니다. 내가 파이썬을 사용하는 7 년 동안, 나는 그것을 여러 번 필요로했고 마지막은 낙타의 등을 부러 뜨린 빨대입니다!
그렇습니다. cmp를 전달할 수는 있지만 통과 해야하는 시간의 90 %는 관용구와 lambda x,y: cmp(score(x),score(y))
잘 맞았
을 것입니다.
마지막으로, 나는 당신 sign
보다 더 유용 할 것이라는 데 동의하기를 바랍니다 copysign
. 그래서 당신의 견해를 사더라도 사인 대신 수학으로 정의하는 것을 왜 귀찮게합니까? copysign이 sign보다 어떻게 그렇게 유용 할 수 있습니까?