본문 바로가기
프로그래밍/Python

[파이썬/Python] 파이썬 기본 자료형 1(숫자형, 문자열, bool형, None)

by 별준 2020. 8. 10.

파이썬 기본 자료형에 대해서 알아봅시다.

파이썬의 자료형에는 숫자형, 문자열, 부울(bool), 리스트, 튜플(tuple), 집합(set), 사전(dictionary)이 있습니다.

 

[숫자형]

숫자형에는 int(정수형), float(실수형), complex(복소수)가 있습니다.

 

- integer(정수형)

말 그대로 양의 정수, 음의 정수, 0을 포함하는 자료형입니다.

a = 123
b = -123
c = 0

파이썬 2.x 버전에서는 엄청 큰 숫자를 담기 위한 long 타입이 존재했지만, 3.x부터는 long 타입이 사라지고, int 타입이 크기 제한이 없는 부호있는 정수형이 되었습니다. 파이썬 정수형의 크기는 컴파일러에 의해서가 아닌 컴퓨터 메모리에 의해서만 제한됩니다.

 

8진수(ex, 0o65)나 16진수(ex, 0x1FF)로도 표현이 가능합니다.

a = 0o65
b = 0x1FF

 

- float(실수형)

실수형은 소수점이 포함된 숫자를 의미합니다. 다른 언어처럼 float와 double 타입이 따로 있는 것과는 달리 파이썬에서는 float 타입만 사용합니다.

a = 123.4
b = -23.1
c = 12e2 		#c = 1200.0
d = 0.012e-1  		#d = 0.0012
e = 1.53E+4		#e = 15300.0

위와 같이 사용하며, e나 E를 사용하여 지수표기법으로 표현도 가능합니다.

 

- complex(복소수)

복소수는 3 + 4j와 같이 실수부(real part)와 허수부(imaginary part)의 합의 꼴로 나타나는 수입니다. 

a = 3 + 4j
b = 2 - 1J
c = complex(5, 4)

위와 같이 사용할 수 있으며, complex 메소드를 통해 실수부나 허수부만 따로 표시하거나 켤레복소수도 바로 확인할 수 있습니다.

 

[문자열]

문자열(string)은 문자들의 집합을 의미합니다. C/C++이나 JAVA에서는 문자(char 타입)와 문자열(string 타입)을 분리하여 사용하지만, 파이썬에서는 문자나 문자열을 문자열로 통일하여 사용합니다.

문자열은 기본적으로 작은 따옴표(')나 큰 따움표(")로 감싸는 형태로 표현 가능합니다. 어느 것을 사용해도 동일하고 어떠한 차이도 없습니다.

s1 = 'Hello, World!'
s2 = "Hello, World!"
s3 = "Hello, World! \
Nice to meet you!"
s4 = '''Hello, Mr. Jun.
Nice to meet you.
Good bye!'''
s5 = """Hello, Mr. Jun.
Nice to meet you.
Good bye!"""
# s4 and s5 is same with s6
s6 = "Hello, Mr. jun.\nNice to meet you.\nGood bye!"

긴 문자열을 여러줄에 걸쳐서 나타내려면 줄을 바꾸기 전에 \ 를 사용하여 여러줄에 입력할 수 있습니다. 

또한 여러 문장을 나타내기 위해서 ''' 이나 """ 을 사용할 수도 있습니다. s4와 s5는 s6과 같습니다.

또한, 문자열에 + 나 * 연산자를 사용할 수도 있습니다.

+ 연산자를 쓰면 앞 문자열 뒤쪽에 이어서 문자열이 붙고, * 연산자를 사용하면 * 연산자 뒤 숫자만큼 반복합니다.

 

추가로, 문자열 내부에 작은따옴표(')나 큰따옴표(")를 포함하고 싶으면, 아래와 같은 방법을 사용하면 됩니다.

이때, \n은 이스케이프 코드입니다.

s1 = '"Python is very easy." he says'		#' ' 사이에 "를 사용하기
s2 = "\"String is python's type\" he says"	#\"를 사용하기
s3 = "String is python's type"		#" " 사이에 '를 사용하기
s4 = '"String is python\'s type" he says'	#\'를 사용하기

 

- 문자열 인덱싱과 슬라이싱

인덱싱은 해당 번호의 순서의 데이터를 가져옵니다. 다른 언어와 비슷하게 파이썬도 0부터 시작합니다.

s = "Hello, World!"
s[0]	#'H'
s[6]	#' '
s[-2]	#'l'

파이썬은 음수로 인덱싱이 가능한데, 뒤에서부터 몇 번째인지를 의미합니다.

 

슬라이싱은 해당 범위 내의 데이터를 가져오는 것입니다.

s = 'Hello, World!'
s[2:5]	#'llo' - index 2 ~ 4까지 출력
s[:5]	#'Hello' - index 0 ~ 4까지 출력
s[8:]	#'orld!' - index 8 ~ 끝까지 출력
s[-1]	#'!' - 뒤에서 1번째 값 출력(-1번째)
s[-4]	#'r' - 뒤에서 4번째 값 출력(-4번째)
s[-5:-1]	#'orld' - -5번째에서 -2번째 값 출력

위와 같이 사용할 수 있으며, 주의해야 할 점은 s[2:5]가 5번째 인덱스까지가 아닌 4번째 인덱스까지 가져온다는 것입니다.

 

파이썬에서 문자열은 변경이 불가능(immutable)합니다. 따라서, C/C++이나 JAVA에서 가능했던 문자열 인덱스로 읽어서 변경하는 것이 파이썬에서는 불가능하고 아래 입력은 에러가 발생합니다.

s = 'Hello, World!'
s[2] = 't'	# Error 발생(TypeError : 'st' object does not support item assignment

 

- 문자열 formatting(포맷팅)

문자열 포맷팅이란 문자열 안에 특정 값을 삽입하는 것입니다. 특정 값은 대체로 변수를 의미합니다.

 

1. %-formatting

C언어와 비슷한 방법입니다. 문자열에 숫자나, 문자열을 대입할 수 있으며, %d(정수형) %f(실수형) %s(문자열) 등을 사용해서 표현합니다. 보통 %s를 사용하면 숫자든 문자든 신경 안쓰고 사용할 수 있습니다. 

name = "Junstar"
"Hello, %s." % name				#'Hello, Junstar.'
print("Hello, %s." % name)		#same result with line 2

age = 85
"Hello, %s. You are %d." % (name, age)	#'Hello, Junstar. You are 85.'

사용되는 parameter가 많아지면 읽기 힘들기 때문에 권장하는 방법은 아닙니다.

 

2. str.format()

이 방법은 %-formatting에서 조금 더 향상된 방법입니다. 이 방법은 메소드 함수를 호출하는 방식으로 사용됩니다.

문자열 안에 중괄호({})를 사용하고, .format 괄호 안에 대입할 변수나 값을 입력합니다.

"Hello, {}. You are {}.".format(name, age)		#'Hello, Junstar. You are 85'
'{} x {} = {}'.format(2, 3, 2*3)				#'2 x 3 = 6'

index를 사용해서 parameter가 들어갈 순서를 지정할 수도 있습니다.

"Hello, {1}. You are {0}".format(age, name)		#'Hello, Junstar. You are 85'

 

아직 배우지 않은 자료형이지만, 아래와 같은 방법으로도 가능합니다.

person = { 'name' : 'Junstar', 'age' : 85 }
"Hello, {name}. You are {age}.".format(name = person['name'], age = person['age'])	#'Hello, Junstar. You are 85.'
"Hello, {a}. You are {b}.".format(a = person['name'], b = person['age'])	#same result with line 2
"Hello, {name}. You are {age}.".format(**person)	#same result with line 2

 

%-formatting 보다는 쉽게 읽히지만, 여전히 문자열이 길이가 길어지고 변수가 많아지면 읽기 힘들어 집니다.

 

또한, 중괄호 표시에 다음과 같이 좀 더 상세히 세부사항을 지정할 수도 있습니다.

# 소수점 이하 셋째 자리까지 표현
print('1 / 3 = {:.3f}'.format(1/3))	# 1 / 3 = 0.333
# 밑줄(_)로 11칸을 채우고 가운데 정렬(^)
print('{0:_^11}'.format('hello')	# ___hello___
# 입력 변수 순서를 바꿔서 출력
print('{0}, {3}, {2}, {1}'.format(1,2,3,4))	# 1, 4, 3, 2

 

3. f-Strings (Python 3.6 이상부터 사용 가능)

2번의 방법과 유사하게 사용되지만, 매우 간편하게 중괄호 안에 변수명을 사용하면 됩니다. 사용법은 아래와 같습니다.

name = 'Junstar'
age = 85
f"Hello, {name}. You are {age}."	#'Hello, Junstar. You are 85.'

문자열 앞에 f를 붙여서 사용하면 됩니다. 물론 대문자 F로도 사용할 수 있습니다.

중괄호 안에는 문자뿐만 아니라, 숫자, 함수(메소드) 등 다양한 타입을 넣을 수 있습니다.

 

 

print 함수는 항상 끝에 줄바꿈 문자 \n을 추가합니다. 따라서, print함수를 호출할 때마다 인자로 주어진 내용 다음에는 다음 줄로 넘어가게 되고, 이것을 막기 위해서는 아래와 같이 사용하면 됩니다.

print("This is", end=" "); print("print function")	# 'This is print function' 출력

 

 

- Bytes

byte로 이루어진 문자열을 위해 bytes라는 타입이 있습니다. 파이썬에서는 b'abcd'와 같은 방식으로 표현합니다. 실제 변수에는 인코딩된 상태로 할당하게 되며, 아스키코드 이외의 문자를 입력하면 에러가 발생합니다.

index 0을 확인해보면 'a'문자열의 바이트 값(아스키코드 값)이 읽히게 됩니다.

 

- 문자열 관련 내장함수

자주 쓰는 문자열 관련함수를 간단하게 나열해보았습니다.

a.len()			#a문자열 길이 반환
a.count('b')		#a문자열에서 'b'문자 개수 count
a.find('b')		#a문자열에서 'b'의 index 반환(처음으로 나온 위치), 해당 문자가 존재하지 않는다면 -1 반환
a.index('b')		#find와 유사하다. 다만 존재하지 않는 문자를 찾는다면 Error가 발생한다.
",".join('abcd')	#abcd문자열 사이에 ','를 삽입한다. => 'a,b,c,d' 반환
a.upper()		#a문자열을 전부 대문자로 변경한다.
a.lower()		#a문자열을 전부 소문자로 변경한다.
a.lstrip()		#a문자열의 왼쪽 공백을 모두 제거한다.
a.rstrip()		#a문자열의 오른쪽 공백을 모두 제거한다.
a.strip()		#a문자열의 양쪽 공백을 모두 제거한다.
a.replace(to, from)	#a문자열의 from에 해당하는 문자열을 to문자열로 치환한다.
a.split()		#a문자열을 공백(스페이스, 탭, 엔터 등)을 기준으로 나누어 준다.
a.split(':')		#a문자열을 ':'을 구분자로 사용해서 나누어 준다.

 

 

[Bool]

부울/불(Bool) 자료형이란 True와 False를 나타내는 자료형입니다. 다음의 값만 가질 수 있으며, 첫 글자는 항상 대문자로 사용해야합니다.

a = True
b = False

bool 자료형은 조건문의 반환 값으로도 사용될 수 있습니다.

 

조금 특이하지만, 파이썬에서 자료형들에게는 참(True)과 거짓(False)가 존재합니다.

if문은 다음에 다룰 예정이지만, 우선 아래 문자열 예시를 한 번 살펴봅시다.

위 예시처럼, strTrue에는 값을 넣었고 strFalse에는 어떠한 값도 넣지 않았습니다. 결과는 값이 존재하는 문자열은 True, 값이 존재하지 않는 문자열은 False로 판단됩니다. 이는 후에 배울 리스트, 튜플(tuple), 딕셔너리(Dictionary)에도 동일하게 적용됩니다. 해당 자료형이 비어있으면 False, 비어있지 않으면 True인 거죠.

 

숫자에서는 값이 0이면 False, 0이 아닌 값이면 True로 판단됩니다(C/C++, Java와 동일).

 

 

[None]

None은 아무 데이터도 가지고 있지 않다는 것을 표현합니다. null과는 조금 다르며, 파이썬에서 None이라는 값도 하나의 객체에 해당합니다(NoneType). 여기서 type 메서드는 파이썬의 내장함수이며 해당 값 또는 변수의 type을 반환합니다.

None은 False로 판단됩니다.

 

 

 

- Reference

https://realpython.com/python-f-strings/#option-1-formatting

https://wikidocs.net/book/1

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

댓글