- 변수명:
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 )