파이썬 문법 디테일 #0

류성현·2022년 2월 12일
0

알고리즘(Python)

목록 보기
1/7

※포스트의 모든 내용은 박상길 저자의 "파이썬 알고리즘 인터뷰" 에서 참고한 내용이다.

파이썬의 세세한 문법

• 인덴트

PEP 8에 따른 원칙적 인덴트는 공백 4칸을 의미한다. 이외에도 다음과 같은 기준들이 있다.

foo = long_function_name(var_one, var_two
						 var_three, var_four)

위와 같이 첫 번째 줄에 파라미터가 있는 경우 파라미터의 시작 부분에 맞추어 공백을 형성한다.

def long_function_name(
		var_one, var_two, var_three,
        var_four):
	print(var_one)

위와 같이 첫 번째 줄에 파라미터가 없다면, 공백 4칸 인덴트를 한번 더 추가하여 다른 행과 구분하게 만든다.

이 같은 디테일한 인덴트 문법은 VSCode 같은 텍스트 에디터나 파이참 같은 개발 도구를 활용하면 좋다. 이들을 이용하면 별도로 신경쓰지 않아도 코딩 가이드를 자동으로 맞춰준다.

• 네이밍 컨벤션

파이썬에서는 변수명을 모드 언더바(_)를 사용하는 스네이크 케이스로 표기한다. 파이썬은 파이썬다운 방식(Pythonic Way)에 대한 굉장한 자부심이 있다고 한다. 그래서 카멜 케이스 뿐만 아니라 자바 스타일로 코딩하는 것을 지양한다고 한다.

camelCase: int = 1 #카멜 케이스
snake_case: int = 1 #스네이크 케이스

• 타입 힌트

파이썬은 대표적인 동적 타이핑 언어이다. 즉 파이썬은, 컴파일을 할 때 자료형이 결정되는 것이 아니라 실행할 때 결정이 된다. 따라서 변수를 선언할 때 변수의 자료형을 명시하지 않아도 된다. 하지만 이런 파이썬도 경우에 따라 타입을 지정하는 것이 좋을 때가 많은데, 그것을 위해 타입 힌트(Type Hint)가 PEP 484 문서에 추가됐다고 한다. 다음 코드와 같은 형태로 타입을 선언할 수 있다.

integer_one: int = 1
string_one: str = "1"

그럼 이러한 타입의 지정이 언제 활욜될 수 있는가. 다음 코드를 살펴보자.

def ex_func1(p1, p2):
	...
    return res

이는 타입 힌트를 활용하지 않은 코드 예제이다. 빠르게 작성이 가능하고 사용할 수 있지만 두 파라미터 p1p2가 어떤 타입의 데이터를 넘겨야하는 지, 리턴해야하는 res가 어떤 타입인지 알 수 없다. 그럼 다음 코드를 보자.

def ex_func2(p1: int, p2: int) -> list:
	...
    return res

이 코드는 앞선 코드와는 달리 파라미터인 p1p2의 타입이 무엇인지 명확하게 알 수 있고, 리턴해야하는 res의 타입이 list 타입임도 바로 알 수 있다. 이렇게 명시적으로 타입을 지정해주면 가독성이 좋아지고 버그를 줄일 수 있다. 실무에서 프로젝트의 규모가 커지고 코드가 길어지면서 복잡해지면 코드의 가독성을 위해 이렇게 타입을 지정해주면 편리할 때가 많다고 한다. 또 코딩 테스트에서는 일반적으로 짧은 알고리즘으로 문제를 해결하여 끝나는 경우가 많아서 굳이 타입을 지정해주지 않아도 될 때가 많지만 코드를 정리할 때 보기 좋게 타입을 지정하여 준다면 코드 리뷰 시에 면접관에게 좋은 점수를 받을 수 있다고 한다.

하지만 여전히 파이썬은 동적으로 할당할 수 있고, 타입 힌트가 강제적인 규약은 아니므로 다음 코드와 같은 실수를 하는 것은 조심해야 한다.

var: str = 1 # var의 실제 타입은 int

• 리스트 컴프리헨션

파이썬에는 리스트 컴프리헨션이라는 기능을 제공한다. 리스트 컴프리헨션은 리스트를 좀 더 직관적이고 간단하게 선언하는 방법이다. 사용법은 다음과 같다.

# 0부터 9 중에서 짝수만 10을 더해서 출력하는 리스트 컴프리헨션
>>> [n + 10 for n in range(10) if n % 2 == 0]
[10, 12, 14, 16, 18]

이 코드를 보통의 코드로 작성한다면 다음과 같을 것이다.

>>> list = []
>>> for n  in range(10):
...		if n % 2 == 0
...        	list.append(n+10)
...
>>> a
[10, 12, 14, 16, 18]

책에서는 리스트 외에도 딕셔너리 컴프리헨션도 소개한다. 그 예시는 다음과 같다.

a = {}
for key, value in original.items():
	a[key] = value

이러한 코드를 다음과 같이 나타낼 수 있다.

a = {key : value for key, value in original.items()}

리스트 컴프리헨션은 아주 간결하게 코드를 작성할 수 있고 가독성이 좋다는 장점이 있지만 표현식이 2개보다 많아지거나 무리하게 복잡하게 작성할 경우 오히려 가독성이 떨어지므로 적절하게 사용하는 것이 좋을 것이다.

profile
진짜 개발자가 되어보고 싶어 공부하는 신생아

1개의 댓글

comment-user-thumbnail
2022년 2월 12일

멋져요 ◡̈

답글 달기

관련 채용 정보