(파이썬 버전: 3.8.2)
파이썬 내장 자료형(builtin type) 중 숫자 자료형에 대해 알아보겠습니다. 파이썬에는 세 가지 숫자형이 있는데 정수, 실수, 복소수입니다. 파이썬에서 논리형(bool)은 정수의 하위 유형으로 정의되어 있습니다.
각 숫자형의 자세한 정보를 알아보겠습니다.
숫자 연산
복소수를 제외한 모든 숫자형은 아래와 같은 연산을 지원합니다.
연산 | 설명 |
x + y | x와 y의 합 |
x - y | x와 y의 차 |
x * y | x와 y의 곱 |
x / y | x와 y의 나눗셈 |
x // y | x와 y의 정수 나눗셈 |
x % y | x / y의 나머지 |
-x | 음의 x |
+x | x 그대로 |
abs(x) | x의 절댓값 |
int(x) | 정수로 변환된 x |
float(x) | 실수로 변환된 x |
complex(real, imag) | real + imag*1j 값을 갖는 복소수 |
c.conjugate() | 복소수 c의 켤레 |
divmod(x, y) | (x//y, x%y)의 튜플 |
pow(x, y) 또는 x**y | x의 y 거듭제곱 |
추가적인 연산은 math, cmath 모듈을 확인하세요
정수 (int)
파이썬에서 정수형은 부호가 있는(signed) 정수형이고, 파이썬 3에서 정수형의 정밀도는 무제한입니다. Java의 BigInteger 생각하시면 됩니다.
C++에서는 int 타입의 크기가 4바이트로 [-(2^31), (2^31)-1]의 범위 제한이 있습니다. 2의 보수(2's complement)를 사용해 정수형을 표현하기 때문인데 이 범위를 넘어가면 오버플로우가 발생하게 됩니다. 파이썬은 기본적으로 임의정밀도를 적용한 정수형을 사용합니다.
class int([x])
class int(x, base=10)
정수객체는 위처럼 만들 수 있는데 base로 진법을 설정할 수 있고 x는 문자열도 올 수 있습니다.
논리형 (bool)
논리형은 정수의 하위 유형입니다. True, False 두 상수 객체인데요, 대문자로 시작한다는 점을 참고해주세요.
>>> bool([1, 2, 3])
True
>>> bool(0)
False
bool(x)로 논리값 검사를 할 수 있는데, 기본적으로 객체는 False를 반환하는 __bool__() 메서드나 0을 반환하는 __len__() 메서드가 정의되어 있지 않으면 True를 반환합니다. 아래 항목에 대해서 False 값이 반환됩니다.
- None, False
- 숫자 형들의 영: 0, 0.0, 0j, Decimal(0), Fraction(0, x) 등
- 빈 시퀀스, 컬렉션: '', (), [], {}, set(), range(0) 등
실수 (float)
>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
실수형은 보통 C의 double을 사용해 구현되는데 sys.float_info를 확인해 정밀도 정보를 확인할 수 있습니다.
class float([x])
sign ::= "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::= floatnumber | infinity | nan
numeric_string ::= [sign] numeric_value
숫자 또는 문자열로부터 실수를 만들 수 있는데, 이때 문자열의 문법은 위와 같아야 합니다.
>>> float('+1.23')
1.23
>>> float(' -12345\n')
-12345.0
>>> float('1e-003')
0.001
>>> float('+1E6')
1000000.0
>>> float('-Infinity')
-inf
예제는 위와 같습니다.
>>> int(5.1)
5
>>> 5.1 - int(5.1)
0.09999999999999964
>>> 5.1 % 1
0.09999999999999964
이런식으로 정수부와 소수부를 분리할 수 있는데 이때 실수 정밀도때문에 오차가 발생할 수 있는 점 참고해주세요.
복소수 (complex)
class complex([real, [, imag]])
위 함수로 real+imag*1j값을 가진 복소수를 만들거나 문자열에서 복소수를 만들 수 있습니다.
문자열에서 복소수를 변환할 때 +, - 연산자 주위 공백이 있으면 ValueError가 나오게 됩니다. 예를 들어 complex('1+2j')는 괜찮지만 complex('1 + 2j')는 ValueError가 발생합니다.
>>> a = complex(1+2j)
>>> a.real
1.0
>>> a.imag
2.0
>>> a
(1+2j)
real, imag로 실수부 허수부에 접근할 수 있습니다.
'etc' 카테고리의 다른 글
[MySQL] 부분 문자열 함수 (LEFT, RIGHT, SUBSTRING) (0) | 2020.09.24 |
---|---|
[Python] 문자열 (str) (0) | 2020.09.23 |
VS code 80글자 세로선 만드는 방법 (0) | 2020.09.22 |
github 'remote rejected'로 푸시 실패하는 경우 해결방법 (access token scope) (1) | 2020.09.21 |
VS code 출력창 오토스크롤 항상 키는법 (1) | 2020.09.20 |