Python 코드의 6가지 인스턴스 재구성

3796 단어 python코드재구성

앞말


자신이 쓴 지루한 코드를 재구성하고 싶은데 생각이 없단 말인가?python 코드 재구성 최적화를 소개하는 방법을 정리해 놓았습니다.
깨끗한 Pythonic 코드를 작성하는 것은 가능한 한 이해하기 쉽지만 간결하게 하는 것이다.그래서 코드를 재구성하여 코드를 간결하고 이해하기 쉽게 하는 것이 필요하다.
본고는 왜 이런 재구성이 좋은 생각인지, 어떻게 하는 것만은 아닌지 여러분과 토론하고자 합니다.

1. 중첩된 if 조건 병합


너무 많은 플러그인은 코드를 이해하기 어렵다. 이것은 Python에서 특히 그렇다. 왜냐하면 Python은 서로 다른 플러그인 단계를 구분하는 데 도움을 줄 괄호가 없기 때문이다.
깊이 박힌 코드를 읽는 것은 짜증나기 쉽다. 왜냐하면 어떤 조건이 어느 등급에 속하는지 정리해야 하기 때문이다.따라서 우리는 가능한 한 끼워 넣는 것을 줄여야 한다. 만약 두 조건이 and로 합쳐질 수 있다면 끼워 넣는 것보다 더 읽기 쉽다.
병합 이전:

if a:
 if b:
  return c
병합 후:

if a and b:
 return c

2. 반복된 코드를 조건문 밖으로 이동


우리는 항상 중복 코드를 제거하는 방법을 찾아야 한다.이것은 코드 능력을 향상시키는 좋은 방법이다.
때때로 조건의 두 지점에 중복 코드가 나타나는데, 이것은 이 코드가 시종일관 실행될 것을 의미한다.따라서 이 중복된 코드는 조건에서 꺼내서 조건 외에 실행할 수 있다.

if sold > DISCOUNT_AMOUNT:
 total = sold * DISCOUNT_PRICE
 label = f'Total: {total}'
else:
 total = sold * PRICE
 label = f'Total: {total}'
label 변수에 대한 값을 조건 밖으로 이동함으로써 우리는 중복된 코드 줄을 삭제하고 조건의 실제 제어 내용을 명확히 했다. 그것이 바로 토탈을 계산하는 것이다.

if sold > DISCOUNT_AMOUNT:
  total = sold * DISCOUNT_PRICE
else:
  total = sold * PRICE
label = f'Total: {total}'

3. 내부 순환 중인 yield를 yield from으로 교체


항상 무시하는 팁 중 하나는 Python의 Yield 키워드에 대응하는 컬렉션을 위한 Yield from이 있다는 것이다.따라서 for 순환 반복 집합을 사용할 필요가 없습니다.이것은 코드를 짧게 하고 for의 추가 변수를 삭제합니다.그리고 for 순환을 제거한 후,yieldfrom은 프로그램의 운행 효율을 약 15% 높인다.
재구성 전:

def get_content(entry):
  for block in entry.get_blocks():
    yield block
재구성 후:

def get_content(entry):
  yield from entry.get_blocks()

4. 순환 대신 any () 사용하기


흔히 볼 수 있는 모델은 집합 중의 하나 이상의 항목이 어떤 조건에 부합되는지 찾아야 한다는 것이다.이것은 for 순환을 통해 완성할 수 있습니다. 예를 들어 다음과 같습니다.

found = False
for thing in things:
  if thing == other_thing:
    found = True
    break
더 간결한 방법은 Python의any () 와all () 내장 함수를 사용하여 코드의 의도를 명확하게 표시하는 것이다.

found = any(thing == other_thing for thing in things)
최소한 하나의 요소가 True로 계산될 때,all () 은 True로 되돌아오고, 모든 요소가 True로 계산될 때만,all () 은 True로 되돌아옵니다.
any () 의 호출에서 값 값이 True인 요소를 찾으면 바로 되돌려줍니다.

5. list () 를 [] 로 바꿉니다.


목록을 만드는 가장 간결하고 Pythonic적인 방법은 []를 사용하는 것입니다.

x = []
x = ['first', 'second']
이렇게 하면 추가적인 장점이 있다. 프로그램 성능을 개선하는 좋은 방법이다.
다음은 변경 이전과 이후의 시간 대비입니다.

$ python3 -m timeit "x = list()"
5000000 loops, best of 5: 63.3 nsec per loop

$ python3 -m timeit "x = []"
20000000 loops, best of 5: 15.8 nsec per loop
같은 원인과 성능 표현은dict () 대신 {} 를 사용합니다.

6. 반복적으로 실행되는 문장을 for/while 순환으로 이동


"변하지 않는"문장을 순환에서 옮겨라.만약 어떤 문장이 순환에 사용할 변수만 설정되어 있다면, 순환 중에는 필요하지 않습니다.순환 자체가 복잡하기 때문에 순환을 작성할 때 더욱 짧고 이해하기 쉽도록 명심해야 한다.
이 예에서, 시티 변수는 순환에 값을 부여하지만, 읽기만 하고 변경하지 않습니다.

for building in buildings:
  city = 'London'
  addresses.append(building.street_address, city)
따라서 이를 옮기는 것은 안전하다. 이것은 같은 도시 값이 모든building 변수에 적용될 것이라는 것을 더욱 명확하게 설명한다.

city = 'London'
for building in buildings:
  addresses.append(building.street_address, city)
순환 중인 모든 문장이 순환할 때마다 실행되기 때문에 프로그램 성능을 향상시켰다.이 여러 번의 집행에 걸리는 시간은 한 번만 집행해야 하기 때문에 낭비에 속한다.만약 문장이 데이터베이스에 대한 호출이나 기타 시간을 소모하는 작업과 관련이 있다면, 이러한 절약은 매우 중요할 수 있다.
참조 링크:
https://sourcery.ai/blog/explaining-refactorings-1/

총결산


파이썬 코드 재구성에 관한 이 글은 여기까지 소개되었습니다. 파이썬 코드 재구성에 관한 더 많은 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기