Python Coding Style을 정하자, 두번째!
코딩 스타일을 정하고 있는 중이다.
지난 번에는 인덴트와 네이밍 컨벤션 종류에 대해 알아보고 어떤것을 사용할지 결정했었다.
이번에 알아 보고 사용할 것은 타입힌트, 리스트 컴프리헨션 이다.
타입힌트
타입힌트
: 파이썬은 동적 타이핑 언어이고, 빠르게 정의하여 사용할수 있다는 장점이 있지만,
규모가 커지면 가독성이 떨어지며, 인자로 무엇을 넘겨야 할지 알수 없는 상황이 생겨난다.
이러한 상황에서 가독성을 높여주기 위해 사용 되는 것이 타입 힌트다.
더 설명하기 보다, 예제를 보여주는것이 이해하기 빠를것 같다.
타입힌트 예)
def fn(a: int) -> bool: # a라는 input은 int이고, 반환되는 값은 bool 자료형이라는것을 명시
if a == 5:
return True
else:
return False
위의 코드와 같이 fn이라는 함수에 a가 int형이라는것, 리턴 값이 bool 자료형이라는 것을 함수만 보고 알수있다.
하지만, 이것은 그저 명시만 해주는 용도일뿐이라, 여전히 동적으로 다른 자료형을 할당 할 수 있다.
mypy 라는 것을 사용하면 타입힌트 오류를 확인 가능하고, 잘못된 자료형을 전달하거나 했을때Incompatiable return value
라는 에러 메시지가 발생하게 된다.
- 설치는 아래와 같이 할수 있다.
pip install mypy
리스트 컴프리핸션(List Comprehension)
리스트 컴프리핸션
: 리스트 컴프리핸션은 기존 리스트를 기반으로 새로운리스트를 만들어내는 기능이고, 파이썬을 사용하여 코딩테스트를 풀게 될때 큰 강점이다.
: 파이썬은 map,filter와 같은 함수형 기능뿐만아니라 람다표현식도 지원한다.
: 다른 언어로 여러줄로 작성해야 할 부분을 리스트 컴프리핸션을 사용하면 한줄로 표현이 가능하다. 하지만, 지나치면 가독성이 너무 떨어지니 조심해야 한다.
아래의 예제 코드를 보자.
#[식 for 변수 in 리스트 if 조건]
#list(식 for 변수 in 리스트 if 조건)
#list(map(함수, 리스트)) 리스트를 함수에 맞게 변환하겠다.
a = list(map(lambda x: x+10, [1,2,3]))
print(a)
a = [n*2 for n in range(1,10+1) if n%2 == 1]
print(a)
위 코드의 실행 결과는 아래와 같다.
[11,12,13] # [1,2,3] 리스트 각 원소에 10이 더해진 원소를 가진 리스트가 출력되었다.
[2,6,10,14,18] # 1~10까지의 리스트 중 홀수가 2배가 된 원소를 가진 리스트가 출력되었다.
위와 같이 잘만 사용하면 편하고, 간단하게 코드를 작성할수있다.
하지만, 한줄로 작성하는것에 꽂혀 다음과 같이 사용하면 가독성이 너무나도 떨어질 수 있으니 조심해야 한다.
a = [(x,y,z) for x in range(5) for y in range(5) if x != y for z in range(5) if y != z]
위와 같은 코드를 작성해야 한다면, 적어도 아래와 같이 줄바꿈을 이용하여 가독성이라도 높여주도록 하자.
a = [(x,y,z) for x in range(5)
for y in range(5)
if x != y
for z in range(5)
if y != z]
출처: 파이썬 알고리즘 인터뷰 (박상길)
'Development > Python' 카테고리의 다른 글
Python Coding Style을 정하자, 첫번째 ! (0) | 2021.11.05 |
---|