[Python 알고리즘] Python 기초
파이썬 책으로 알고리즘 공부를 다시 해야지 해야지 하다가 간만에 잡아 읽고 모르거나 헷갈리는 내용 위주로 정리하기로 결심했다.
오늘 공부한 파트는 파이썬의 이모저모 같은 내용도 있고, 기초적인데 이런 것도 있었어?하는 내용이라 보면 될 거다.
파이썬
파이썬은 1989년 12월 네덜란드 컴퓨터과학자 귀도 반 로섬이 만들었다.
파이썬은 70년대 세계를풍미한 영국의 코미디 그룹 몬티 파이썬(Monty Python)의 이름을 따 파이썬이라는 이름을 붙임
파이썬의 개발은 파이썬 개선 제안서(PEP, Python Enhancement Proposals) 프로세스를 통해 진행.
PEP 0 -- Index of Python Enhancement Proposals (PEPs)
The official home of the Python Programming Language
www.python.org
파이참에서 reformat code를 실행하면 자동으로 코드를 PEP 8 기준에 맞춰준다.
타입힌트
파이썬에는 타입을 지정할 수 있는 타입힌트라는 기능이 있다. 강제 규약은 아니라서 다르게 입력해도 동적할당이 된다.
ex )
a: str = "1"
a는 str이어야 한다
def fn(a: int) -> bool:
함수 fn의 파라미터는 int형이고, 리턴값은 bool형이다.
mypy 라이브러리를 이용하면 타입 힌트에 오류가 없는지 자동으로 확인이 가능(pip install mypy 등으로 설치)
리스트 컴프리헨션
기존 리스트를 기반으로 새로운 리스트를 만들어내는 구문. 적절히 사용하면 가독성이 높아서 파이썬 코딩의 기술의 백미로 꼽힘.
ex)
List(map(lambda x: x + 10, [1, 2, 3]))
output : [11, 12, 13]
[n*2 for n in range(1, 10 + 1) if n% 2 ==1]
output : [2, 6, 10, 14, 18]
제너레이터
루프의 반복 동작을 제어할 수 있는 루틴 형태.
기존의 함수가 return 구문을 만나면 동작을 종료하는 것과 달리, yield를 사용하여 중간값을 리턴하고 계속해서 맨 끝에 도달할 떄까지 실행.
range
range : 생성 조건만 설정하고 나중에 필요할 때 생성할 수 있어서 메모리 사용에 이점이 있음.
ex)
a = [n for n in range(1000)]
b = range(1000)
len(a) == len(b) -> True
sys.getsizeof(a) -> 9024
sys.getsizeof(b) -> 48
enumerate
순서가 있는 자료형(list, set, tuple 등)을 인덱스를 포함한 enumerate 객체로 리턴
ex)
a = [1, 2, 3]
list(enumerate(a)) -> [(0,1), (1,2), (2,3)]
sep파라미터로 구분자를 콤마(,)로 지정 가능
print('A1', 'B2', sep=',')
output : A1, B2
end파라미터로 줄바꿈 대신 공백으로 할 수 있음
print('a', end= ' ')
print('b')
output : a b
리스트 출력시에는 join()으로 묶어서 처리
format을 이용하여 int와 string을 같이 print 가능
print('{} : {}'.format(2, 'apple')
f-string(formated string literal, python 3.6+)을 이용하면 format보다 더 간결하게 가능
print(f'{2}: {fruit})
locals
로컬 심볼 테이블 딕셔너리를 가져오는메소드.
ex)
import pprint
pprint.pprint(locals())
-> 로컬 스코프에 정의된모든 변수 출력해줘서 편리함
코딩 스타일
가능한 한 많은 사람이 좋아하며 선호하는 방식을 택하는 것이 중요하다
추천 도서 : 파이썬 기반이 아니거나 오래된 도서여서 지금 관점에서 아주 적합하지는 않을 수도 있다고 함.
- Clean Code, 로버트 C. 마틴
- 프로그래밍 수련법, 브라이언 W. 커니핸, 롭 파이크
실용적인 파이썬 코드 작성 가이드 사이트
- PEP 8 : https://www.python.org/dev/peps/pep-0008/
- 파이썬 스타일 가이드 : https://google.github.io/styleguide/pyguide.html
끝으로, 파이썬 철학을 공유한다.
참고문서
[0] 파이썬 알고리즘 인터뷰, 박상길