출처: hamait 님의 tistory
모든 창작의 시작은 모방(a.k.a 창시모)
원본 글은 여기( link )를 참고하길 바란다.
functools.partial 설명
- 하나 이상의 인수가 이미 채워진 함수의 새 버전을 만들기 위해 사용된다.
- 함수의 새 버전은 그 자체를 기술 하고 있다.
Example
첫째, 지수를 명시적으로 수행하는 함수를 만든다고 하자. (파이썬의 내장된 pow () 함수와 비슷하다)
이제 정해진 지수 2와 3을 갖는 전용 사각형 및 큐브 함수를 원한다면 어떻게 될까?
이때 우리는 다음과 같이 할 수 있을 것이다.
이 방법이 나름 효과적이지만 power() 함수의 변형을 15 개 또는 20 개 만들려면 어떻게 해야 할까? 1000개는? 그렇게 많은 반복적인 코드를 작성하는 것은 말할 필요도 없이 짜증나는 일이다. 이런 일을 해야할때 partials를 사용한다.
사각형과 큐브 함수를 다시 작성해 보자.
이 부분함수에 대한 속성은 아래와 같이 기술 할 수 있다.
def power(base, exponent):
return base ** exponent
이때 우리는 다음과 같이 할 수 있을 것이다.
def square(base):
return power(base, 2)
def cube(base):
return power(base, 3)
사각형과 큐브 함수를 다시 작성해 보자.
from functools import partial
square = partial(power, exponent=2)
cube = partial(power, exponent=3)
def test_partials():
assert square(2) == 4
assert cube(2) == 8
def test_partial_docs():
assert square.keywords == {"exponent": 2}
assert square.func == power
assert cube.keywords == {"exponent": 3}
assert cube.func == power
assert 란?
1) python assert 설명
예외를 발생시키는 예외처리랑 비슷하지만, 예외처리는 에러가 발생했을때 어떤 처리를 하기위한 코드이고, 이 assert (가정 설정문)은 어떤 조건이 True임을 보증하기 위해서 사용하는 것 입니다.
오류를 발생시키는 raise와 비슷하지만 다릅니다. raise에 대한 자세한 설명이 필요하다면 [바로가기]
raise는 만약에 오류가 발생했을때 "except 와 함께 이렇게 처리해라" 는 뜻이고
assert는 이 조건이 참일때 코드는 내가 보장한다. 이 조건은 올바르다!
하지만 이 조건이 거짓이라는 것은 내가 보증하지 않은 동작이다. 그러니 AssertionError를 발생해라.
이런 식의 흐름입니다.
2. assert 예제
a = 10
# True 인경우
print("1. assert True 인 경우")
assert a == 10, "a is not 10"
print("끝1")
# Fasle 인 경우
print("2. assert False 인 경우")
assert a == 999, "a is not 999"
print("끝2")
예제 결과를 보면 assert가 True인 경우에는 스무스 하게 코드가 지나가고 "끝1"도 잘 나오는 것을 볼 수 있습니다.
assert a == 999, "a is not 999" 해당 코드에서는 a가 10이므로 a == 999 라는 조건이 맞지 않습니다.
assert의 조건이 False가 되었으므로 "a is not 999"라는 메시지와 함께 AssertionError가 나오는 것을 볼 수 있습니다.
반응형
댓글