인덴트
인덴트(indent) : 들여쓰기. 공식 가이드인 PEP 8 에 따라 공백 4칸이 원칙
foo = function_name(var_one, var_two,
var_three, var_four)
# 첫줄에 파라미터가 있다면, 파라미터 시작부분에 맞춘다.
def function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# 첫줄에 파라미터가 없다면, 공백4칸 인덴트를 한번 더 추가하여
# 다른행과 구분되게 한다.
네이밍 컨벤션
파이썬의 변수명 네이밍 컨벤션은 각 단어를 밑줄(_)로 구분하여 표기하는 스네이크 케이스(snake case)를 따른다. 함수명도 마찬가지.
카멜 케이스(camel case)는 지양한다.
# 카멜 케이스 - 대소문자로 구분하여 섞어서 작명하는 방식
camelCase: int = 1
# 스네이크 케이스 - 각 단어를 언더스코어(_)로 구분
snake_case: int = 1
타입 힌트
a: str = '1'
b: int = 1
타입힌트를 사용하면 a가 정수형인지 문자형인지 분명하게 알 수 있다. 명시적으로 선언하게 되면 가독성이 좋아지고 버그 발생 확률을 줄일 수 있다.
def fn(a: int) -> bool:
# 이런식으로 타입힌트를 사용하면 a가 정수형이고 리턴값으로
# True or False를 리턴한다는 것을 알 수 있다.
리스트 컴프리헨션
파이썬은 map, filter와 같은 함수형 기능을 지원. 람다 표현식도 지원한다.
list(map(lambda x: x + 10, [1, 2, 3]))
-> [11, 12, 13]
람다보다 파이썬의 훨씬 더 유용한 기능이 리스트 컴프리헨션(list comprehension)이다. 리스트 컴프리헨션은 기존 리스트를 기반으로 새로운 리스트를 만들어내는 구문. 람다표현식에 map, filter 를 섞어 쓰는 것보다 가독성이 훨씬 좋다.
a = []
for i in range(1, 10 + 1):
if i % 2 == 1:
a.append(i * 2)
# 홀수인 경우 2를 곱해 출력하는 코드이다.
# 리스트 컴프리헨션을 쓴다면 아래와 같다.
[i * 2 for i in range(1, 10 + 1) if i % 2 ==1]
한줄로 간결하게 작성할 수 있어서 가독성이 좋은 편. 무리하게 복잡하게 작성할 경우 가독성을 떨어뜨리므로 적절히 사용하는게 중요. 대체로 표현식은 2개를 넘지 않아야 함.
<참고문헌>
박상길, "파이썬 알고리즘 인터뷰", 책만, 2020