본문 바로가기

Programming/Python

1. Python _ 기본, 자료형

이 포스팅은 점프 투 파이썬을 다시 정독하면서 파이썬의 기초적이지만 매번 찾아보거나 몰랐던 부분을 정리하기 위한 목적으로 작성되었습니다.

파이썬은 C/C++와 결합이 가능하다.
때문에, 파이썬은 접착(Glue)언어라고도 불리며, C나 C++로 만든 프로그램을 파이썬에서 사용할 수 있으며, 파이썬으로 만든 프로그램 역시 C나 C++에서 사용할 수 있다. 예로 Numpy(Numeric Python)은 파이썬의 느리다는 특성을 보완하기 위해 만들어진 수치연산모듈로 C로 작성되었다.

파이썬은 아직 모바일 프로그래밍에는 부족하다. 안드로이드/아이폰 모두..

8진수와 16진수의 표현
8진수는 0o또는 0O로 시작 ex) a=0o177
16진수는 0x로 시작 ex)0x8ff <- 요렇게 생긴 놈들을 자주 봤었는데 16진수란 걸 이제야 알았다.

큰 따옴표 세개 혹은 작은 따옴표 세개를 활용하여 문단을 \n(이스케이프코드) 없이 작성할 수 있다.
ex)
'''
Here is Jiwan's blog.
It's pretty good.
'''

\를 활용하여 '나 "를 문자열에 포함시킬 수 있다.
\t를 활용하여 문자열 사이에 탭 간격을 줄 수 있다.

문자열은 immutable한 자료형이기에 요소값을 바꿀 수 없다
ex) a = 'python'을  'pithon'으로 바꾸기 위해서 a[1] =  'i'는 오류가 난다.
이럴 땐 슬라이싱을 활용하여 a[:1]+'i'+a[2:]를 활용하자.
혹은 a.replace('y','i')라는 함수를 이용

문자열 포매팅
"I eat %d apples" %3 같은 형식
%d는 정수, %f는 float, %s는 문자열, %c는 문자열 한 개, %%는 %를 뜻한다.

고급 문자열 포매팅
"I ate {0} apples. for {1} days.".format(number,day) 이런식으로 가능.
{}안에 day를 넣고 뒤에 .format(day=3)이런 식으로도 가능.
f'Hi, I am {name}. I am {sex}.' 그런데 파이썬 3.6부터 이게 가능해짐. 이게 짱인 듯.

문자열 인덱싱
.index()와 .find() 모두 인덱싱을 하지만, .find()는 값이 없으면 -1을 리턴하고 .index()는 에러를 낸다.

문자열 공백 지우기
.lstrip(), .rstrip(), .strip() -> 데이터마이닝에 많이 쓰일 듯.

리스트는 안에 다양한 자료형이 들어갈 수도 있음.
ex) a = [1,'Life',[5,3,'kkk']]

리스트끼리는 더하면 리스트가 이어짐. 이거 은근히 헷갈림.
ex) a=[1,2,3] b=[4,5,6] >>> a+b= [5,7,9] 가 아니라 [1,2,3,4,5,6]

리스트에서 연속된 범위의 값 수정하기
a = [1,5,6] 일 때, [1, 2, 3, 4, 5, 6]으로 만들고 싶다면,
a[1] = [2,3,4]로 해버리면 a=[1,[2,3,4],6]이 되어버림.
이럴 때, a[1:1]=[2,3,4]로 해주면 a=[1,2,3,4,5,6]이 됨.
a.insert(1,4), a.insert(1,3), a.insert(1,2) 해줘도 될 듯?

딕셔너리 생성 시 중복되는 key값을 만들면 안됨. key는 고유해야 함. 중복되면 무시해버림.
a={1:'a', 1:'b'}라고 한 후 a를 출력하면 ㅁ{1:'b'}만 나옴. 심지어 뭐가 무시될 지 조차 예측 못함.
Value에는 list써도 되지만 key에는 안됨. 

집합 자료형은 중복을 허용하지 않고, 순서가 없다. 뭔가 안쓸 것 같아서 일단 패스.
합집합 교집합 차집합 등의 집합연산 가능.
s2 = set('hello') -> s2: {'e', 'l', 'o', 'h'}

자료형의 참/거짓
문자열: "": False
리스트: []: False
숫자형: 0: False

파이썬에서 사용하는 변수는 객체를 가리키는 것이다.
ex) a=3이라고 하면 a가 3이라는 정수형 객체를 가리키는 것.
b=3이라고 하면 또 다른 변수 b가 정수형 객체 3을 가리키는 것.
둘 다 같은 것을 가리키므로 a is b를 출력하면 True인 개념.

파이썬에서는 메모리에 생성된 변수를 일일이 삭제할 필요없다.
파이썬이 알아서 해주거든..
하지만 지우고 싶다면 del()을 쓰면 된다.

리스트 복사의 진실.
a=[1,2,3]을 b에 복사하려 할 때, b=a라고 해주면? 객체가 단순복사되어 b를 수정해도 a가 바뀜.
이를 해결하기 위해 b=a[:]라고 해주던지, b=copy(a)라고 해주면 됨. 하지만 이도 만약  a안에 또 다른 변수나 리스트가 있다면 거기까진 복사가 안됨.
c나 c++ 에서 자주 들었던 깊은 복사가 여기에도 있음. 그냥 b = deepcopy(a)라고 해주면 됨. 그럼 그 내용도 재귀적으로 복사됨.

변수 이름 설정
파이썬은 변수 설정시 snake_case를 이용한다.
예를 들면 이름이 긴 변수를 설정할 때 pen_pineapple_apple_pen과 같이 설정하는 것이 일종의 약속이다.
반대로 자바스크립트는 CamelUpperCase를 이용한다
예를 들면 PenPineappleApplePen과 같이 작성한다.

args, kwargs
args는 postional argument,
kwargs는 keyword argument를 뜻하며, 함수에서 인자를 숫자 제한 없이 받을 때 주로 사용한다.
*args, **kwargs