더북(TheBook)

(정수에서 실수로) 암묵적 변환 파이썬은 가능한 경우 자동으로 정수를 실수로 변환하기 때문에 실수가 필요한 곳에 정수를 사용할 수 있다. 예를 들어 10/4.02.5로 평가된다. 4.0이 실수이고 피연산자 두 개가 모두 같은 형이어야 하므로, 10이 실수로 변환되어 결국 두 개의 실수로 나눗셈을 하기 때문이다. 그리고 math.sqrt(4)를 평가하면 2.0이 된다. math.sqrt()가 실수를 인수로 받기 때문에 4가 실수로 변환되고 연산 후 실수를 반환하기 때문이다. 이러한 방식으로 이루어지는 형 변환을 자동 승격(automatic promotion), 혹은 억제(coercion)라고 한다. 정보를 손실하지 않고 형을 변환할 수 있으므로 파이썬에서 제공하는 자동 형 변환 기능은 타당하다. 그러나 주의할 점이 몇 가지 있다. 예를 들어 앞에서 살펴본 것처럼 파이썬 3는 / 연산자의 피연산자를 자동으로 실수형으로 변환하지만, 파이썬 2는 변환하지 않는다. 따라서 (1 + 2 + 3 + 4) / 4는 파이썬 3에서는 2.5, 파이썬 2에서는 2로 평가된다.

int()float() 함수를 사용해 형 변환 의도를 명시한다면 자동 승격 개념은 필요 없다. 가능한 한 자동 승격을 피하는 프로그래머들도 있다. 그러나 자동 승격에 의존하는 코드는 더 간단하고 읽기 쉬우므로, 이 책에서는 자동 승격을 이용한다. 그러나 / 연산자로 숫자 두 개를 나눌 때는 언제나 피연산자 두 개 중 최소 하나는 실수형이 되도록 만들 것이다. 앞에서 설명한 것처럼 표현식 (1 + 2 + 3 + 4) / 4.0을 파이썬이 평가할 때, 첫 번째 피연산자를 자동 승격시켜 우리가 원하는 결과인 2.5로 평가되기 때문이다. 자동 승격을 이용하면 코드가 파이썬 3와 파이썬 2에서 모두 제대로 작동하며, 이런 방식을 지원하는 다른 언어들도 많다. 그러나 이 책에서는 두 개의 정수를 나눌 때는 / 연산자를 사용하지 않는다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.