[파이썬 클린코드] Chapter1


이것은 Python Clean Code 2판의 요약입니다.


입력하다

클린 코드란?

다른 사람이 읽고, 이해하고, 사용(유지)할 수 있는 코드.

선적 서류 비치

코드를 문서화하는 것은 주석을 추가하는 것과 다릅니다.
코드를 문서화하기 위해 독스트링과 주석을 사용할 수 있습니다.

코드 주석 코드 주석

좋은 코드는 이미 명확하기 때문에 주석이 필요하지 않으므로 가능한 한 적은 주석을 목표로 하십시오. 따라서 댓글을 달기 전에 1. 새로운 기능을 추가하거나 2. 더 나은 다른 변수 이름을 사용하여 개선해 보는 것이 좋습니다.

문서 문자열

소스 코드에 포함된 문서를 참조할 수 있으며 이는 주석이 아닌 문서임을 유의해야 합니다.
다른 개발자가 작성한 docstring을 보고 작업 방법이나 입/출력 정보를 확인할 수 있어야 하므로 주석 대신 가능한 한 많은 docstring을 추가하는 것이 좋습니다.
이 설명서는 함수의 입력 및 출력 정보가 ​​작동하는 방식을 이해하는 데 도움이 됩니다.

docstring이 코드에 정의되어 있으면 다음 속성에 대해 확인할 수 있습니다.

# 1.
my_function.__doc__
# 2. 
help(my_function)

독스트링의 단점은 코드가 변경될 때 수동으로 업데이트해야 한다는 것입니다.
따라서 간단한 코드의 경우 중복된 의미를 가진 docstring을 작성하지 않는 것이 좋습니다.

주석

주석을 사용하면 예상되는 변수 유형과 같은 메타데이터를 지정할 수 있습니다.
lat 및 long이 float로 예상되는 경우 이러한 방식으로 설정할 수 있지만 유형이 확인되지는 않습니다.

@dataclass:
class Point:
	lat : float
    long : float
   
def locate(latitude : float, longitude : float) -> Point:
	"""맵에서 좌표에 해당하는 객체를 검색"""

또한 주석을 사용하면 아래와 같이 보다 의미 있는 코드를 작성하고 입력 방법을 보다 명확하게 전달할 수 있습니다.
또한 기존의 주석을 다른 객체나 클래스로 변경하여도 그대로 사용할 수 있습니다.

# Before
def launch_task(delay_in_seconds):
	pass
    
# After
Seconds = float
def launch_task(delay : Seconds):
	pass

주석이 생성되면 저작, 유효성 검사, 유형 검사 등을 수행할 수 있는 __annotations__라는 속성이 생성됩니다.

그리고 Annotation을 만들면 보다 간단하고 명료하게 클래스를 작성할 수 있습니다.
__init__에서는 선언 후 변수를 할당할 필요가 없습니다.

# Before
calss Point :
	def __init__(self, lat, long):
    		self.lat = lat
        	self.long = long
        
# After
from dataclasses import dataclass
@dataclass
class Point:
	lat : float	
    long : float
  • 어노테이션과 docstring이 상호보완적인 개념임을 인식하십시오.

도구 설정

동료가 작성한 코드를 검토할 때 묻는 질문

  • 이 코드는 다른 개발자가 쉽게 이해하고 따라할 수 있습니까?
  • 비즈니스 도메인에 대해 이야기하고 있습니까?
  • 팀에 새로 온 사람들이 효과적으로 이해하고 작업할 수 있습니까?

데이터 유형 일관성 검사

여러 도구가 있지만 여기서는 mypy 및 pytype을 사용할 수 있습니다.
단, pytype의 경우 일시적으로 다른 데이터 타입을 사용해도 결과가 선언된 타입이면 에러로 보고되지 않는다.
이러한 도구가 검사를 제대로 수행하려면 주석을 정확하게 작성해야 합니다.

# 기본
mypy 파일명

# 특정 라인에 대한 검사를 무시하게 하는 경우
type_to_ignore = "sth" # type : ignore

일반 코드 검토

보다 일반적인 유형의 검사를 위해 pylint 또는 coala를 사용할 수 있습니다.
pylint는 엄격한 코드 품질 검사가 가능합니다.
Coala의 경우 Python뿐만 아니라 다른 유형의 언어도 지원합니다.
이러한 방법으로도 감지되지 않으면 직접 검사가 필요한 항목을 추가할 수 있기 때문에 이러한 방법을 사용할 수 있습니다.

자동 서식

한 가지 유용한 방법은 코드를 자동으로 형식화하는 것입니다.
검정색을 사용하면 항상 동일한 형식을 가질 수 있습니다.
–check 기능을 사용하면 확인만 가능하고 실제로 변경할 수는 없습니다.
또는 yapf를 사용한 서식은 원하는 영역에만 적용할 수 있습니다.

자동 스캔 설정

자동화는 프로젝트 설정, 컴파일 및 실행을 돕는 도구인 Makefile을 사용하여 수행할 수 있습니다.


제가 직접 작성한 코드를 사용하고 있는데, 코드를 너무 함부로 작성한 것이 아닌가 하는 생각이 들어 깔끔한 파이썬 코드를 살펴보기로 했습니다.
개정판이 막 나왔으니 개정판으로…!
개념을 대충 훑어본 후 응용 프로그램에서 수정할 수 있는 부분을 수정해서 이어가려고 합니다.