이번에 지인에게 추천받은 파이썬 알고리즘 인터뷰 라는 책을 샀다.
코딩 책은 많이 사서 읽는 편이 아니지만, 알고리즘 공부에 도움이 될 것 같아 구매했다.
읽다보니 꽤 잘 정리된 것 같고, 내 생각보다 몰랐던 부분이 많아서 앞으로 정리하면서 읽어야지 하고 생각했다.
이 책에 나온 파이썬 문법을 나름대로 요약해서 정리해보고자 한다.
그럼 시작!!
파이썬의 특징 중 하나이며 공식 가이드인 PEP8(파이썬 개선 제안서)에 따라 공백 4칸을 원칙으로 한다.
def long_funciton_name(var_one, var_two, var_three, var_four):
print(var_one)
파이참 도구를 쓰면 행 구분을 자동으로 해준다!
2. 네이밍컨벤션
파이썬의 변수명, 함수명 네이밍컨벤션은 각 단어를 밑줄로 표기하는 스네이크 케이스를 따른다.
카멜케이스와 반대되는 성격이다. (자바의 표기 방법)
camelCase: int = 1
snake_case: int = 1
3. 타입힌트
타입 힌트는 가독성을 위해 필요하다. 필수는 아니지만 나중에 긴 코드를 봤을 때 버그 발생 확률을 줄일 수 있다.
a: str = "1"
b: int = 1
def fn(a: int) -> bool:
mypy를 사용하면 타입 힌트에 오류가 없는지 확인이 가능해 수정할 수 있다.
4. 리스트 컴프리헨션
기존 리스트를 기반으로 새로운 리스트를 만들어내는 구문
# 리스트 컴프리헨션 사용
[n * 2 for n in range(1, 10+1) if n % 2 == 1]
# 일반적 코드
a = []
for n in range(1, 10 + 1):
if n % 2 == 1:
a.append(n * 2)
한줄로 간결하게 표현 되지만, 복잡하게 쓰면 가독성을 떨어뜨린다. 표현식은 2개가 넘지 않아야 한다.
5. 제너레이터
루프의 반복동작을 제어할 수 있는 루틴형태, yield 구문을 사용하여 리턴한다.
큰 숫자인 경우 필요할 때만 생성하여 차지하는 메모리 양을 줄여준다.
return 구문은 함수를 종료하지만, yield 구문을 만나면 여기까지 실행중인 값을 내보내 중간 값을 리턴하고 함수를 종료시키지 않고 끝까지 실행된다.
def get_natural_number():
n = 0
while True:
n += 1
yield n # 리턴 값이 제너레이터가 된다.
g = get_natural_number()
for _ in range(0,100):
pring(next(g)) # 다음 값을 생성하려면 next()를 수행한다.
대표적인 함수로 range() 가 있다. 주로 for 문에서 쓰이며 제너레이터의 next()를 호출하듯 다음 수를 생성한다.
a = [n for n in range(1000000)]
b = range(1000000)
sys.getsizeof(len(a)) #8697494
sys.getsizeof(len(b)) #48
차지하는 메모리 수가 다르다.
6.enumerate
enumerate()는 열거하다 라는 뜻의 함수로 여러가지 자료형을 인덱스를 포함한 enumerate 객체로 리턴한다.
a = ['a1', 'b1', 'c1']
for i in range(len(a)):
print(i, a[i])
for i, v in enumerate(a):
print(i, v)
# 모두 [(0,a1),(1,b1),(2,c1)]의 결과를 반환하지만 아래 방법이 더 깔끔하다
7. 나눗셈 연산자
'/'연산자는 나눗셈을 표현해 소수점 이하 자리까지 표현되고, '//' 연산자는 몫을 구할 때 사용한다.
5 / 3 => 1.666666667
5 // 3 => 1
동시에 몫과 나머지를 구하려면 divmod() 함수를 사용한다.
divmod(5,3)
= (1,2)
8. print
print 함수는 값을 출력할 때 사용하며 sep 파라미터로 구분자를 지정할 수 있다.
print('A1','B1',seq=',')
= A1,B1
end 파라미터를 공백자로 지정하여 줄바꿈을 하지 않도록 제한할 수 있다.
print('aa', end=' ')
print('bb')
= aa bb
리스트를 출력할 때는 join()으로 묶어서 처리한다.
a = ['A', 'B']
print(' '.join(a))
= A B
f-string 방법을 써서 변수를 출력할 수 있다.
idx = 1
fruit = "Apple"
print('{0}: {1}'.format(idx+1, fruit)) # 인덱스를 활용해서 함께 출력할 수 있다
print(f'{idx+1}:{fruit}') #f-string으로 바로 출력할 수 있다
= 2 : Apple
9. pass
코드를 실행하지 않는 부분에 넣어서 오류를 발생하지 않도록 한다. null 연산의 역할로 아무것도 하지 않는 기능을 가지고 있다.