일단 간략하게 정리하면 책으로는 파이썬 기본을 배웠고, 파이썬 공식 문서를 통해서 좀 더 고급, 또는 활용성이 높은 프로그래밍 방법들을 배웠어요. 그리고 순간 순간 미묘하게 궁금한 부분들은 구글링으로 해결했어요.
파이썬 2와 3은 코드가 호환이 안 되고 문법도 약간 달라요. 그래서 책들도 버전 2, 버전 3 기준 책들이 따로 있어요.(표지에 안 적혀 있으면 저자의 서문 등에 보면 대체로 나옴.) 버전 2를 공부하고 싶으면, 대부분 2.7 버전이 기준일 거고, 버전 3을 공부하고 싶으면 최근 안정화 버전인 3.6 을 추천할게요. 그렇지만 굳이 버전 2가 꼭 필요한 상황 (유지보수 일을 하는데 이전에 개발된 코드가 2로 개발되었다던지)이 아니면 버전 3를 추천할게요 (또 2로 개발된 코드도 2to3 같은 트렌스파일러로 생각보다 쉽게 변환이 가능해요.).
이 책은 서점에서 파는데, 위 링크에서 무료로 인터넷 ebook 처럼 볼 수 있어서 웹사이트에서 봤어요. 구매는 안 했지만, 구매하면 책에는 웹사이트와 다르게 추가 설명 조금이랑 연습문제가 있다고 하네요(큰 차이 같지는 않음). 프로그래밍을 처음 배우는 사람을 기본 타겟으로 삼았어요. 그래서 타 언어로 프로그래밍 경험이 있는 사람은 변수, 함수, 클래스 등 이미 아는 개념 설명 부분에서는 넘어가도 될 것 같고, 그 외에 내용들은 입문으로 도움이 될 괜찮은 책이라고 생각해요.
이 책은 처음 완전 입문 용으로 봤었어요. Head first 시리즈는 쉬운 설명으로 유명하니까 구입해서 봤엇죠. 나름 괜찮았어요. 위의 점프 투 파이썬과는 다른 부분에서 활용적인 측면도 꽤 알려줬었고..
이 책은 읽어보지는 않았는데, 신뢰할 만한 지인으로부터 좋다는 평가를 들었어요. 위의 두 책과는 달리 두껍고 상세하다고 들었어요.
아무래도 프로그래밍을 잘 하려면 공식 문서를 참조하는 게 많은 도움이 된다는 말이 있죠. 그런데 개인적으로 프로그래밍 언어 같은 경우는 공식 문서보다도 직관적으로 잘 정리된 책이 많기도 해서 공식문서를 꼭 봐야한다고 생각하지는 않아요. 경험상 프레임워크는 서적이 없거나 서적보다 공식문서에서 질 좋은 정보를 얻을 수 있는 경우가 많아서 공식문서를 크게 선호하는 편이에요. 그렇지만 파이썬은 다른 언어들이랑 비교해봐도 공식 문서가 잘 정리되 있는 편 같고, 경험상 파이썬을 잘 하고 싶다면 공식문서가 큰 도움이 될 수 있다고 생각해요. 파이썬 공식 문서는 일단 당연히 버전 별로 따로 존재하지만, 버전 3.6 기준으로 예시를 들어볼게요.
파이썬 공식 문서가 한 종류가 아닌데, 여기에 가면 옹기종기 모여있어요. 아래 설명한 Tutorial 페이지랑 Library Reference 페이지 모두 여기에 링크가 있어요
저는 공식문서에서 객체지향적인 설계를 위한 문법이나, Enum, generator를 다루는 방법, 여러 자료구조들을 다루는 자세한 방법, threading 과 multiprocessing 등에서 크게 도움을 받았던 것 같아요.
이 페이지는 말 그대로 튜토리얼인데 정말로 튜토리얼 하기에 꽤 괜찮아요. 눈에 띄는 리스트가 있으면 원하는 내용 골라서 읽으면 좋아요.
파이썬을 사용할 때 매우 유용하게 쓸 수 있는 라이브러리들을 배우기 좋아요. 라이브러리 사용방법은 책을 통해 찾는 것 보다는 이렇게 공식 문서를 통해 보는게 좋은 것 같아요.
- 4.6. Sequence Types — list, tuple, range
- 정말 이 Sequence Types 문서는 꼭 봐야 한다고 생각합니다...
- 4.9. Set Types — set, frozenset
- 4.10. Mapping Types — dict
- 8.13. enum — Support for enumerations
- 이늄이 언젠가 필요할 테니..
너무 기본적인 거는 제외하고 생각나는 대로 매우 유용했던 것들을 적어봤어요.
for f, l in zip(range(7,10), ['a','b''c']):
print(f,l)
출력결과
7 a
8 b
9 c
for idx, el in enumerate(('p','y')):
print(idx, el)
출력결과
0 p
2 y
ls = [1,34,5,7]
odds = list(filter(lambda el: el%2==1, ls))
# odds 는 ls 에서 홀수만 필터링한 리스트인 [1,5,7] 가 된다.
ls = [1,4,6,8]
squares = list(map(lambda el: el**2, ls))
# squares 는 [1,16,36,64]가 되어 ls 의 모든 요소들을 제곱한 리스트가 된다.
import functools
ls = [1,4,6,8]
multiplication = functools.reduce(lambda f, l : f * l, ls)
# multiplication 은 1*4*6*8 = 192 가 된다.
def func(arg1, arg2=22):
print(arg1, arg2)
func(11) # 11 22 출력됨
func(11, 33) # 11 33 출력됨
파이썬에는 키워드 파라미터가 있어요. 꼭 알아야 해요.
def func(arg1, arg2):
pass
func(11, 22) # 가능
func(11, arg2=22) # 가능
def func2(arg1, *, arg2):
pass
func(11, arg2=22) # arg2는 키워드 파라미터로만 가능
파이썬에서는 파리미터를 유연하게 다룰수 있도록 *과 ** 을 파라미터 앞에 붙일 수 있게 하는데, 일반적으로는 *args, **kwargs
로 표현하죠. 꼭 자세히 알길!
class Temp:
def __init__(self):
self._x = 1
@property
def x(self):
return self._x
@x.setter
def x(self, val):
self._x = val
obj = Temp()
print(obj.x) # 1 출력
obj.x = 2
print(obj.x) # 2 출력
python에서 쓰는 super() 는 자바와 같은 다른 언어들의 super 또는 비슷한 구문들과 확연히 달라요. 파이썬에서 super() 는 다중상속시 다이아몬드 다이어그램에서 발생하는 메서드 중복 호출 문제와 같은 이슈들을 해결하기 위해 내부적으로 MRO(Method Resolution Order)를 사용하는데, 파이썬으로 객체지향 설계를 한다면 꼭 알아둘만한 가치가 있어요.
파이썬은 데코레이터를 통해서 관점지향 프로그래밍을 쉽게 할 수 있어요. 개인적으로 자바에서 AOP를 많이 사용해오다가 파이썬에서 이 정도로 간단히 쓸수 있다는 게 좋았어요. 반드시 알아둘 만한 가치가 있어요.
데코레이터 사용시 데코레이터에 영향받지 않고, 데코레이팅된 원래 함수의 속성들을 외부에 노출할 수 있게 해요. decorator에 대해 알고 쓰기 시작하면 @functools.wraps 함수가 꼭 필요한 때가 오죠.
import functools
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@decorator
def decorated():
pass
많은 언어들이 특정 부분에서 집중적으로 쓰이는 데에 반해서 파이썬은 웹, IoT, 데이터 과학, 인공지능 등 거의 모든 분야에서 골고루 쓰이는 것 같아요. 각 분야에서 유명한 모듈 및 프레임워크들이 있는데, 웹 개발에서는 django, flask가 있고, 데이터 과학 및 수학에는 numpy, scipy 등이 유명하고, 머신러닝에서는 tensorflow와 같이 많은 모듈들이 있어요. 파이썬은 언어 자체도 간결하고 개발이 빠르지만 이런 오픈소스 생태계 자체도 잘 구축되어 있어서 좋아요. pypi, pip 의 사용방법과 가상환경 구축, 파이썬 패키지 관리 방법 들도 알아두면 좋을 거에요!