Notice
Recent Posts
Recent Comments
05-17 09:12
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Python functools 함수들 본문

Programming Language/Python

Python functools 함수들

알 수 없는 사용자 2022. 7. 26. 17:39

reduce 함수는 리스트 들에 대해 어떠한 연산을 누적하여 수행하고 싶을때 쓸 수 있는 함수이다.

예를 들어 [1,3,5,67,4,5]라는 리스트를 다 더하고 싶다면 다음과 같이 적으면 된다.

from functools import reduce

lst = [1,3,5,67,4,5]

print(reduce(lambda x, y: x+y, lst))
# 85

lambda 식이 아니더라도 사용자 정의 함수로 다가갈 수 있다.

 

파이썬 3.9에서는 @functools.cache라는 함수가 있는데 데코레이터로 쓴다면 값들을 저장하여 다시 그 연산을 수행할때, 연산을 안하고 바로 호출 할 수 있도록 한다. 이를 메모이제이션이라고 말하는데, 동일한 계산의 반복 수행을 제거하여 최적화하는 기술이다. 계산이 무거울 때 사용가능하다. 하지만 메모리 차지하는 것 또한 고려해야하기에 사용할때 주의하는게 좋다.

@cache
def fibonachi(n) :
    return fibonachi(n-1)+fibonachi(n-2) if n>2 else 1

 

이와는 다르게 메모리 사이즈를 직접 넣을 수 있는 cache가 있는데 @functools.lru_cache이다. 결과를 캐시 하는 데 딕셔너리가 사용된다. maxsize는 기본으로 128mb로 주어진다. lru는 least recently used의 약자이다. 일반적으로 이전에 사용한 값을 재사용 할 때만 사용한다.

@lru_cache
def count_vowels(sentence) :
	return sum(sentence.count(vowel) for vowel in 'AEIOUaeiou')

 

partial 함수는 함수의 인자를 고정하여 사용할 수 있도록 한다. 예를 들어 '10010'은 이진법으로 표현된 문자열 데이터인데 이를 숫자로 나타내기 위해 서는 int('10010', base=2)를 해주어야 한다. 하지만 다음과 같이 사용하면 함수의 재사용이 가능하다.

from functools import partial
basetwo = partial(int, base=2)
basetwo.__doc__ = 'Convert base 2 string to an int.'
basetwo('10010')
Comments