> 백엔드 개발 > 파이썬 튜토리얼 > Python 코드를 더욱 Pythonic하게 만드는 8가지 리팩토링 팁

Python 코드를 더욱 Pythonic하게 만드는 8가지 리팩토링 팁

WBOY
풀어 주다: 2023-04-10 15:01:40
앞으로
1882명이 탐색했습니다.

1. 중첩된 if 문 결합

간단하게 시작합니다. 이와 같은 if 문을 중첩하지 말고 하나로 결합하세요.

if a:
if b:
pass

# -> refactor
if a and b:
pas
로그인 후 복사

2. 루프 대신 any를 사용하세요

여기서 목록에 긍정적인 요소가 하나 이상 있는지 확인하고 싶습니다. 더 긴 해결책은 모든 숫자를 반복하고 현재 숫자를 확인한 다음 조건이 true일 때 중단하는 것입니다. 하지만 이 작업을 위해 Python에는 any 함수라는 특수 메서드가 있습니다. iterable의 요소 중 하나라도 true인 경우 any는 True를 반환합니다. 이는 수동 루프보다 훨씬 짧고 더 파이썬적입니다.

numbers = [-1, -2, -4, 0, 3, -7]
has_positives = False
for n in numbers:
if n > 0:
has_positives = True
break

# -> refactor
has_positives = any(n > 0 for n in numbers)
로그인 후 복사

3. for/while 루프에서 명령문 추출

루프에 정의된 변수를 여러 번 볼 수 있지만 결코 변경되지 않습니다. 이는 불필요한 작업이므로 루프에서 꺼내어 한 번만 생성하면 됩니다.

for building in buildings:
city = 'London'
addresses.append(building.street_address, city)

# -> refactor
city = 'London'
for building in buildings:
addresses.append(building.street_address, city)
로그인 후 복사

4. 한 번만 사용되는 인라인 변수를 제거하고 즉시 반환합니다.

마지막 함수에서 변수를 정의하고 한 줄만 지나면 즉시 반환되는 코드를 여러 번 볼 수 있습니다. 함수가 수행하는 작업을 알고 있다면 결과를 직접 반환하면 됩니다. 이는 더 간결하고 불필요한 변수를 방지합니다. 그러나 때로는 함수가 수행하는 작업이 명확하지 않은 경우 마지막 변수에 의미 있는 이름을 지정하고 이를 자체 문서화 코드로 사용할 수 있습니다.

def state_attributes(self):
"""Return the state attributes."""
state_attr = {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}
return state_attr

# -> refactor
def state_attributes(self):
"""Return the state attributes."""
return {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}
로그인 후 복사

5. if 문을 if 표현식으로 대체

if else 문으로 변수의 값을 설정하는 대신, 이와 같은 if 표현식을 사용하여 한 줄에 설정할 수 있습니다. 그러나 이 재구성 기술은 다소 의심스럽습니다. 어떤 사람들은 여전히 ​​첫 번째 옵션을 선호하지만 괜찮습니다.

if condition:
x = 1
else:
x = 2

# -> refactor
x = 1 if condition else 2
로그인 후 복사

6. 경고 문구 추가

이 코드를 보면 무슨 일이 일어나고 있는지 빨리 파악하기 어렵습니다. 여러 개의 if-else 문과 여러 개의 들여쓰기가 있습니다. 자세히 살펴보면 첫 번째 if 문이 거의 전체 함수 코드를 다루고 있다는 것을 알 수 있습니다. 마지막에는 해당 else 절이 있고 False를 반환한다는 것뿐입니다.

이 else 절을 ​​처음으로 이동할 수 있습니다. 이는 주의사항이라고도 합니다. 따라서 조건이 true가 아니면 나머지 함수 코드는 실행되지 않습니다. 이렇게 하면 else 절이 제거되고 이제 전체 코드에서 들여쓰기 수준이 한 단계 낮아집니다. 이것이 더 명확하고 이해하기 쉬워 보입니다.

def should_i_wear_this_hat(self, hat):
if isinstance(hat, Hat):
current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish
else:
return False

# -> refactor
def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish
로그인 후 복사

7. 사용 위치에 더 가깝게 할당 이동

이전 예제에서 개선된 코드이지만, 여기서 무슨 일이 일어나고 있는지 이해하는 데는 여전히 시간이 걸립니다. 그래서 우리는 모자를 써야 하는지 확인하고 싶습니다. 논리는 다음과 같습니다. 비가 오면 항상 True라고 말하고, 비가 내리지 않으면 모자가 세련되면 True라고 말합니다. 이 논리의 가독성을 크게 향상시킬 수 있는 간단한 방법 중 하나는 할당을 해당 용도에 더 가깝게 이동하는 것입니다. if 문을 사용하기 전에 날씨 조건을 이해해야 합니다. 이제 패션 및 스타일 변수는 else 절에서만 필요하므로 아래로 이동하세요. 이제 무슨 일이 일어나고 있는지 더 명확해졌습니다.

위 항목 4에서는 코드를 더욱 단축하고 평가 스타일 결과를 즉시 반환할 수 있습니다. 이 경우 is_stylish​는 모자가 스타일리쉬하면 True​라고 말하고, 그렇지 않으면 False라고 말하므로 is_stylish​가 더 나은 이름입니다. 따라서 여기에 추가 변수를 유지하십시오.

def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish

# -> refactor
def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

weather_outside = self.look_out_of_window()
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
current_fashion = get_fashion()
return self.evaluate_style(hat, current_fashion)
# is_stylish = self.evaluate_style(hat, current_fashion)
# return is_stylish
로그인 후 복사

8. 시퀀스 확인을 단순화하세요

이것은 제가 많이 보는 또 다른 것입니다. 예를 들어 목록에 컬렉션에 요소가 있는지 확인해야 하는 경우 if len(your_list) > 0​이라고 쓸 필요가 없습니다. if your_list라고 간단히 말하면 됩니다. 이는 진실 테스트라고도 알려진 pep 8 권장 접근 방식입니다. 이는 Python에서 빈 시퀀스와 세트가 False로 평가되기 때문에 가능합니다. 따라서 이는 문자열, 튜플, 목록, 사전 및 집합에 적용될 수 있습니다.

아아아아

위 내용은 Python 코드를 더욱 Pythonic하게 만드는 8가지 리팩토링 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿