간단하게 시작합니다. 이와 같은 if 문을 중첩하지 말고 하나로 결합하세요.
if a: if b: pass # -> refactor if a and b: pas
여기서 목록에 긍정적인 요소가 하나 이상 있는지 확인하고 싶습니다. 더 긴 해결책은 모든 숫자를 반복하고 현재 숫자를 확인한 다음 조건이 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)
루프에 정의된 변수를 여러 번 볼 수 있지만 결코 변경되지 않습니다. 이는 불필요한 작업이므로 루프에서 꺼내어 한 번만 생성하면 됩니다.
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)
마지막 함수에서 변수를 정의하고 한 줄만 지나면 즉시 반환되는 코드를 여러 번 볼 수 있습니다. 함수가 수행하는 작업을 알고 있다면 결과를 직접 반환하면 됩니다. 이는 더 간결하고 불필요한 변수를 방지합니다. 그러나 때로는 함수가 수행하는 작업이 명확하지 않은 경우 마지막 변수에 의미 있는 이름을 지정하고 이를 자체 문서화 코드로 사용할 수 있습니다.
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, }
if else 문으로 변수의 값을 설정하는 대신, 이와 같은 if 표현식을 사용하여 한 줄에 설정할 수 있습니다. 그러나 이 재구성 기술은 다소 의심스럽습니다. 어떤 사람들은 여전히 첫 번째 옵션을 선호하지만 괜찮습니다.
if condition: x = 1 else: x = 2 # -> refactor x = 1 if condition else 2
이 코드를 보면 무슨 일이 일어나고 있는지 빨리 파악하기 어렵습니다. 여러 개의 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
이전 예제에서 개선된 코드이지만, 여기서 무슨 일이 일어나고 있는지 이해하는 데는 여전히 시간이 걸립니다. 그래서 우리는 모자를 써야 하는지 확인하고 싶습니다. 논리는 다음과 같습니다. 비가 오면 항상 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
이것은 제가 많이 보는 또 다른 것입니다. 예를 들어 목록에 컬렉션에 요소가 있는지 확인해야 하는 경우 if len(your_list) > 0이라고 쓸 필요가 없습니다. if your_list라고 간단히 말하면 됩니다. 이는 진실 테스트라고도 알려진 pep 8 권장 접근 방식입니다. 이는 Python에서 빈 시퀀스와 세트가 False로 평가되기 때문에 가능합니다. 따라서 이는 문자열, 튜플, 목록, 사전 및 집합에 적용될 수 있습니다.
아아아아위 내용은 Python 코드를 더욱 Pythonic하게 만드는 8가지 리팩토링 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!