Python 클램프(Clamp) 함수란?
클램프(Clamp) 함수는 값이 주어진 범위를 벗어나지 않도록 상한값과 하한값 사이로 제한하는 기능을 합니다. 예를 들어, 어떤 숫자가 최솟값보다 작으면 최솟값으로, 최댓값보다 크면 최댓값으로 조정하여 항상 지정된 범위 안에 머물게 만듭니다.
아쉽게도 Python에는 이러한 클램프 함수가 기본 내장되어 있지 않습니다. 하지만 min()과 max() 함수를 조합하면 아주 간단하게 직접 구현할 수 있습니다.
클램프 함수 직접 구현하기
다음 코드는 숫자를 지정된 범위로 고정하는 클램프 함수의 기본적인 구현 예시입니다.
def clamp(num, min_value, max_value):
return max(min(num, max_value), min_value)
print(clamp(5, 1, 20))
print(clamp(1, 10, 20))
print(clamp(20, 1, 10))실행 결과는 다음과 같습니다.
5 10 10
코드 동작 원리
이 함수가 어떻게 동작하는지 단계별로 살펴보겠습니다.
1단계: min(num, max_value) — 입력값이 최댓값보다 크면 최댓값으로 잘라냅니다.
2단계: max(결과, min_value) — 앞서 얻은 결과가 최솟값보다 작으면 최솟값으로 올려줍니다.
예제 결과를 보면:
clamp(5, 1, 20)→ 5는 이미 범위(1~20) 안에 있으므로 그대로 5가 반환됩니다.clamp(1, 10, 20)→ 1은 최솟값인 10보다 작으므로 10으로 조정됩니다.clamp(20, 1, 10)→ 20은 최댓값인 10보다 크므로 10으로 조정됩니다.
Python 3.x에서의 대안
Python 3.8 이상에서는 statistics 모듈 없이도 위 방법이 가장 널리 사용되지만, 조건문을 활용해 더 명확하게 표현할 수도 있습니다.
def clamp(num, min_value, max_value):
if num < min_value:
return min_value
elif num > max_value:
return max_value
else:
return num두 방식 모두 동일한 결과를 반환하지만, min()과 max()를 사용하는 첫 번째 방법이 한 줄로 간결하게 처리할 수 있어 실무에서 더 많이 선호됩니다. 게임 개발, 데이터 정규화, 센서 값 제한 등 값의 범위를 통제해야 하는 다양한 상황에서 유용하게 활용할 수 있습니다.