본문 바로가기

[Language] - Python21

# 20. Counter 이번 포스트에서는 파이썬의 기본 모듈인 collections 모듈중에서 Counter에 대해 알아볼 것이다. Counter 클래스는 기본적으로 dict(딕셔너리)클래스를 상속받고 있다. 해당 클래스는 요소의 빈도수를 체크하기 적합한 자료형이다. 우선 Counter 클래스를 사용하지 않고 요소의 빈도수를 체크하려면 딕셔너리를 사용할 것이다. corpus = "abcdeabcdabcaba" d = dict() for c in corpus: d.setdefault(c, 0) d[c] += 1 d >>> {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1} 위 코드처럼 딕셔너리를 사용하여 각 문자들의 빈도수를 매핑할 수 있다. 하지만, 이는 Counter를 알고있다면 for문이 불필요하게 사.. 2022. 3. 1.
# 19. [Magic Method] __call__() 필자는 pytorch를 다루면서 신기한 점이 있었다. 뭐.. 그렇게 대단한건 아닐 수도 있지만, 모델 클래스에 대한 인스턴스를 생성하면 해당 인스턴스를 마치 함수처럼 쓰는 것을... 맨 처음에는 별 다른 생각없이 다른 사람들의 코드를 보고 따라 썼다. 하지만, 쓰면 쓸수록 궁금증이 머리에서 맴돌았다. 어떻게 인스턴스를 함수처럼 사용하는 걸까? 결론은 매직 메소드 (magic method)에 있었다. 파이썬이라는 언어는 진짜 마법처럼 사전에 모든 클래스에 정의된 매직 메소드라는 것이 있다. 언더바(_)가 앞뒤로 붙은 메소드들을 볼 수 있을 것이다. 더군다나 pycharm을 사용한다면 특별히 다르게 색이 빛나는 메소드들을.. 위 스크린샷에서 볼 수 있다시피 predefined 라는 글자가 눈에 밟힌다.. '.. 2021. 11. 19.
# 18. 데코레이터 (Decorator) 이번 포스트는 갑자기 프로퍼티 포스트에 급 어그로가 끌려서 데코레이터가 무엇이냐고 묻는 분들을 위해 간략하게 작성한다. 데코레이터의 사전적인 의미는 장식자이다. 무엇을 장식할까? 바로 함수를 장식한다. 데코레이터 사용법은 대상이 되는 함수 위에 @데코레이터명 을 쓰면 된다. 예를 들면, @staticmethod, @classmethod, @property 등 다양한 데코레이터들이 있고, 사용자가 임의로 데코레이터를 정의할 수도 있다. 데코레이터가 무엇인지 코드로 직접 이해해보자. def say_hi(): print("i'm function") print('hi') def say_hello(): print("i'm function") print('hello') def say_bye(): print("i'm.. 2021. 11. 9.
# 17. [Magic Method] __new__() & __init__() 파이썬을 다루면서 클래스를 작성해보았다면 인스턴스를 생성해본 적이 있을 것이다. class o: pass o1 = o() 대체로 2021. 8. 2.
# 16. eval eval 함수는 expression (표현식)을 기반으로 동작을 하는 함수이다. expression이 무엇인지 한번 알아보자. eval('1+2') >> 3 위와 같이 1+2 라는 동작을 문자열로 나타낸 것이 expression이다. 즉, 특정 동작을 나타낸 문자열 단위이다. 다른 expression도 확인해보겠다. eval('len([1, 2, 3, 4])') >> 4 eval('abs(-90)') >> 90 다음과 같이 간단한 동작들을 expression을 통해 수행할 수 있다. eval('l = [1, 2, 3]') >> Traceback (most recent call last): File "", line 1, in File "", line 1 l = [1, 2, 3] 반면 eval을 통한 메모리.. 2021. 8. 2.
# 15. [Tip] chunk 리스트를 원하는 원소 수대로 묶는 방법! from math import ceil def chunk(lst, size): return list(map(lambda x: lst[x * size:x * size + size], list(range(0, ceil(len(lst) / size))))) 좀 복잡해보이는 방법.. math 모듈의 ceil (올림) 메소드를 사용하여 구현한 것이다. 좀더 깔끔하게 짤 수 있는 방법을 알아보겠다. def chunk(lst, n): return [lst[i:i+n] for i in range(0, len(lst), n)] 파이썬의 슬라이싱을 활용하여 간결하게 구현할 수 있다! 2021. 6. 2.