
PEP8에서 권고하는 파이선 코드 작성법에 대해 살펴보자.
1. In-place 문자열 결합 대신 Join()을 사용한다.
a +=b 또는 a = a+b와 같은 인플레이스 문자열 결합 대신 join() 메소드로 결합하는 것이 다양한 파이썬 구현에서 더 적은 시간 연계를 보장한다.
문자열을 연결하면 파이썬 문자열은 불변이기 때문에 각 연결에 대해서 새로운 메모리를 할당해야하지만,
join을 사용하면 파이썬이 결합된 문자열에 메모리를 한 번만 할당하기 때문에 Join()을 사용하는 것이 적합하다.
first_name = "Json"
last_name = "smart"
# Not a recommended way to concatenate string
full_name = first_name + " " + last_name
# More performant and improve readability
" ".join([first_name, last_name]) 2. None과의 비교가 필요한 경우 is와 is not을 사용한다.
# Not recommand
val = {}
if val:
# recommand
if var is noe None # None 값이 거짓인지 명시적으로 확인3. 특정 식별자에 lambda 표현식을 할당할 때는 함수 사용을 고려한다.
함수 작성 시, lambda를 사용하는 것은 def로 함수를 작성하는 것보다 좋지 않은 선택일 수도 있다.
아래 코드 같은 경우 def square(val) 함수를 객체는 제네릭보다 문자열 표현과 Traceback에 더 유용하다.
코드의 가독성에 영향을 주지 않도록 더 큰 표현식에서 lambda를 사용하는 것을 고려하자.
# Not recommand
square = lambda x: x * x
# recommand
def square(val):
retrun val * val4. return 구문의 일관성을 유지하자
함수가 값을 반환할 것으로 예상되면, 해당 함수의 모든 실행 경로에서 값을 반환하는지 확인한다. 함수 종료하는 모든 곳에서 return 표현식을 사용한 것이 좋다.
# not recommand
def calculate_interest(principle, time, rate):
if principle > 0:
return(principle * time * rate) / 100
# recommand
def calculate_interest(principle, time, rate):
if principle > 0 :
return(principle * time * rate) / 100
else:
return None5. "".startswith()와 "".endswith()을 사용하자
접두사나 접미사를 확인해야할 때는 slice로 문자열을 자르는 대신 "".startswith()와 "".endswith()을 사용한 것을 권장한다. slice는 큰 문자열을 자르거나, 문자열 연산을 수행할 때 더 나은 성능을 얻을 수 있지만, 접두사나 접미사를 확인하는 것과 같이 간단한 작업을 수행하는 경우는 startswith와 endswith 중 하나를 사용해서 코드를 좀 더 읽기 쉽고 명확하게 만들 수 있다.
# not recommand
data = "Hello, how are you doing?"
if data[:5] == "Hello":
# recommand
data = "Hello, how are you doing?"
if data.startswith("Hello")6. 두 객체의 타입 비교 시, type() 대신 ininstance()를 사용하자
두 객체의 타입을 비교할 때 subclass의 경우 ininstance()가 true이므로 type 대신 insinstance()를 사용하는 것이 좋다.
orderdict와 같은 dict의 서브클래스가 데이터 구조를 전달하는 케이스의 경우 특정 타입의 데이터 구조에서 type()이 실패하는 문제가 발생할 수 있다. 그러나 ininstance()는 dict의 서브클래스임을 인식할 수 있다.
# not recommand
user_list = {"Sandy": 28, "Tom" : 29, "Imens" : 34}
if type(user_list) == dict:
# recommand
user_list = {"Sandy": 28, "Tom" : 29, "Imens" : 34}
if isinstance(user_list, dict):7. Boolean 값을 비교하는 파이써닉 방법
boolean 값 비교하는 방법도 여러가지가 있는데 그중 권고하는 방식을 False 값인지 비교하는 것이 아니라 할당해서 사용하는 방식으로 작성하는 것이 훨씬 파이써닉 합니당
# not recommand
if is_empty == False:
if is_empty is False:
# recommand
is_empty = False
if is_empty'Python' 카테고리의 다른 글
| [Clean Python] Docsting 사용하기 (2) | 2024.11.27 |
|---|---|
| [Clean Python] Python 코드 표현과 구문 (1) | 2024.11.24 |
| [Clean Python] 파이썬에서의 underscore(_, __)에 대해 (0) | 2024.11.23 |
| [Python] Mac에서 default Python 버젼 변경하기 (0) | 2024.11.22 |
| [Pandas] FutureWarning 에러 - Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. (0) | 2024.11.15 |