Skip to content

Instantly share code, notes, and snippets.

@jjangga0214
Last active March 11, 2018 10:31
Show Gist options
  • Save jjangga0214/2ffdd9bdfff9d4d46706f1139abaa944 to your computer and use it in GitHub Desktop.
Save jjangga0214/2ffdd9bdfff9d4d46706f1139abaa944 to your computer and use it in GitHub Desktop.

개선 가능할 수도 있는 사항

  • 변수명: max, min은 이미 python에서 존재하는 함수명이라, 같은 이름으로 변수 선언시 namespace 를 덮어써서 함수를 못쓰게 되니, 변수명을 바꾼다.(max_, max_val 등 적절히 알아서)
  • 네이밍 스타일(필수 아닌 권장) : python naming sytle (PEP 정의)인 헝가리안 표기법으로 바꾼다. 예를 들어, findMax (camel case style => java 관례) 대신 find_max (hungarian notation => python 관례). 
  • 중복 제거 : find_min find_max의 유일한 차이점은 if문 안의 조건 하나뿐이다. 해당 부분을 parameter로 받아 중복을 없애자.
  • global 제거 : 전역변수 global 사용은 피하자. (차라리 아래 예시처럼 튜플로 여러 값을 반환하는 것이 더 권장된다. )
  • enumerate 사용 : for문에서 인덱스으로 iterable에 접근하지 말자(linked 한 경우 느려짐). 만일 인덱스와 요소가 모두 필요하면 enumerate 쓰자.

예시 코드

def find(data, predicate):
    val = data[0]
    val_idx = 0
    for idx, element in enumerate(data):
        if (predicate(val, element)):
            val = element
            val_idx = idx
    return val, val_idx


def find_max(data):
    return find(data, lambda val, el: val < el)


def find_min(data):
    return find(data, lambda val, el: el < val)


if __name__ == '__main__':
    data = [90, 40, 60, 10]
    max_val, max_idx = find_max(data)
    min_val, min_idx = find_min(data)
    print(max_val, max_idx )
    print(min_val, min_idx )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment