02 데이터 타입
2020년02월14일02 변수 및 데이터 타입
참고
애스크장고 AskDjango
변수(Variables)
- 프로그램이 실행되면서 필요한 데이터를 임시로 저장하는 공간
- 효율성을 높이기 위해 적절한 크기/ 용도의 변수에 값을 담아서 처리
- 하나의 소프트웨어가 동작하면서, 로직에 따라 수많은 새로운 변수가 생겨나고 변경되며 제거
파이썬은 메모리상에 값이 존재하고, 변수가 참조하는 형태라고 하는데, 이 부분은 더 공부해서 정리해봐야겠다.
예시로는
a=3
b=3
id(a), id(b)를 출력해보면 동일한 주소값이 표시된다.
데이터 타입(Data Types)
- 변수는 하나의 데이터를 담아두는 그릇 같은 개념이다.
- 용도에 따라 그릇이 다르듯, 용도에 맞게끔 활용하여 효율성을 높여야 한다.
- 자원은 유한하다는 것도 알아두자.
숫자 (Numeric Type)
- 정수형: int
- 실수형: float
파이썬2에서는 int, long, float, double형이 존재했는데, 파이썬3로 넘어가면서 int/float로 통합되었다 한다.
명시를 중요하는 개발자 입장에서는 별로 좋아하지 않을거 같은데, 나는 파이썬으로만 공부해서인지, 현재까지는 이게 편한다.
수의 범위 제한이 없다는데, 잘못 쓰면 메모리를 남용할 수 있을거 같다.
참/거짓 (Boolean)
나중에 배울 제어문은 참/거짓을 통해서 프로그램의 동작을 다양하게 할 수 있다.
- 참 - True
- 거짓 - False
비교연산자를 활용하여 Boolean 값을 받아올 수 있다. 이것을 통해 향후 조건문이라던가 반복문에서 활용할 수 있다.
비교 연산자 종류
- <, <=, >, >=, ==, !=
- is, is not
논리 연산자
- or, and, not
bool() 함수를 이용하여 참/거짓을 출력할 수 있다.
- 0은 False, 이 외에는 True
bool(0) -> False
bool(-1) -> True
- 빈 문자열은 False, 이 외에는 True
bool('') -> False
bool(' ') -> True
스페이스도 문자열이다!
- 빈 list/tuple/set/dict는 False, 이 외에는 true
bool([]) -> False
bool([' ']) -> True
문자열 (String)
홑(‘)따옴표나 쌍따옴표(“)로 감싸진 애들은 문자열이다. name1 = ‘Python’ name2 = “Python”
I’m seokju를 출력하기 위해서 ‘I’m seokju’로 입력하면 오류가 발생한다.
이럴 경우에는 백슬래쉬()를 활용한 이스케이프처리를 해주거나 쌍따옴표로 감싸주고 ‘를 쓰면 된다.
- 이스케이프: ‘I\‘m seokju’
- 쌍따옴표: “I’m seokju”
홑(쌍)따옴표를 3개로 감싸주면, 여러 줄 문자열을 지원한다.
test = '''
Hi
I'm
Seokju
'''
문자열 형식 지정자
문자열 내에 {}
와 같은 형태로 슬롯을 만들고 format함수를 통해 슬롯에 필요한 데이터를 남길 수 있다.
format함수에 함수인자로서 슬롯을 지정하는 방법은 위치(Positional), 키워드(Keyword) 방법이 있다.
위치 인자 (Positional Arguments)
# a, b, c 출력. format의 맨 처음 인자가 {0} 순으로 입력이 된다.
'{0}, {1}, {2}'.format('a','b','c')
#a, b, c 출력. 부여된 번호가 없어 순서대로 입력
'{}, {}, {}'.format('a','b','c')
# c, b, a 출력. - format인자가 0번째부터 시작하기 때문이다.
'{2}, {1}, {0}'.format('a','b','c')
# c, b, a 출력. 언패킹이라는 건데, 추후 설명
'{2}, {1}, {0}'.format(*'abc')
# 에러 발생 - 숫자만큼 인자 개수 맞춰줘야 한다.
'{0}, {1}, {2}'.format('a','b')
키워드 인자 (Keyword Arguments)
'{lat}, {lng}'.format(lat='37.24N', lng='-115.81W')
#딕셔너리 언패킹을 통해 출력
coord ={'lat':'1234', 'lng':'4444'}
'{lat}, {lng}'.format(**coord)