함수형 프로그래밍은 뛰어난 확장성과 안정성을 가지고 있다. 함수형 패러다임을 가져가면서 실무에서 사용할 수준의 커스텀 메서드를 구현하고 싶다면 도움이 될 것 같다. from functional import seq from functional.pipeline import extendfrom typing import TypeVarfrom typing import List, IterableT = TypeVar('T')lst = [1, 2, 3, 4, 5] 01. 기본 메서드 사용하기pyfunctional의 seq을 이용하여 함수형 프로그래밍을 구현하면 다음과 같이 내장된 함수를 기본적으로 사용할 수 있다. # 01. use built-in map, filterrs = ( seq(lst) .map(..
분류 전체보기
함수 오버로드: 같은 함수 기능을 유지하면서 다른 타입의 input을 처리하고 싶을 때 from typing import overload@overloaddef func(x: int) -> int: ...@overloaddef func(x: str) -> str: ...def func(x): if isinstance(x, int): return x + 1 elif isinstance(x, str): return x + "1" else: raise TypeError("Invalid type")func(1) # 2func("1") # "11"func(1.0) # TypeError: Invalid type 함수를 리턴하는 함수from typing im..

문제Context를 관리하는 프로토콜을 만들어야 할 때 적절하게 클래스를 구현하는 방법해결with 구문으로 __enter__() __exit__() 메소드를 구현하자코드직접 구현__enter__() : 시작 시 동작 정의__exit__() : 종료 시 동작 정의# Connection Class 구현 from socket import socket, AF_INET, SOCK_STREAMclass LazyConnection: def __init__(self, host, port): self.host = host self.port = port self.sock = None def __enter__(self): if self.sock is None: ..

모든 어린 아이는 이미 그 안에 노인이 있고,갓 태어난 모든 아기는 이미 그 안에 죽음을 가지고 있으며, 모든 죽어가는 사람들은 영원한 생명을 가지고 있어.우리의 삶은 죽어있으면서도, 활기를 띄고있다.돌은 흙이었으며 식물이고 동물이 될 수 있다.돌은 돌이고, 강은 강이 아니다.우리는 보여지는 것 그 자체가 가지는 모습을 사랑하고 숭배해야 한다.이것이 내가 찾은 이 책의 전부다.헤르만 헤세는 싯다르타라는 바라문의 어린 아이의 일생을 통해 인간은 어떻게 살아가야하며, 사랑이란 무엇이고, 인간은 어떻게 죽어가는가. 모든 것이 윤회인 이 세상엔 고통이 동시에 기쁨이 되는 일체 형태로 존재하고 있음을 전달하고 싶었던 것 같다. 어린 시절의 싯다르타는 인도 바라문의 자손이었다. 싯다르타는 신성했고 모든 이들에게 ..

문제부모 클래스를 상속받은 자식 클래스에서 부모의 메소드를 실행하고자 할 때.해결super()를 사용하여 쉽게 부모 클래스의 함수를 실행하자. 코드좋지 않은 예시. 상속 계층이 깊어질 때, 다중 상속일 경우일 때, 직계 부모 클래스를 지정하여 실행하면 불필요하게 메소드가 실행되는 것을 볼 수 있다. # Tricky initialization problem involving multiple inheritance.# Does NOT use super()class Base: def __init__(self): print('Base.__init__')class A(Base): def __init__(self): Base.__init__(self) print('A...

문제클래스로 인스턴스를 많이 생성할 때, 메모리도 같이 증가하여 자원을 효율적으로 쓰지 못한다. 해결클래스 속성으로 __slots__ 필드를 튜플 혹은 리스트로 생성하여, 생성자가 가지고 있어야 하는 속성으로만 제한하여 메모리를 줄일 수 있다. 자료구조 상 딕셔너리는 해시 테이블을 생성을 위한 메모리를 잡아놓기 때문에,튜플과 리스트에 비해 메모리를 많이 가지고 있다. 코드slots를 만들어주면 더 이상 해당 클래스는 slots에 정의된 변수밖에 생성하지 못한다. 반면, dictionary는 클래스의 속성을 유동적으로 추가할 수 있다.즉, immutable한 클래스에 대해서만 slots을 정의하여 사용하는 것이 좋다.import sysclass WithoutSlots: def __init__(self..

문제 함수에 인자가 너무 많을 때, 특정 파라미터를 고정하고 함수를 실행시켜야 할 때. 해결functions의 partial()를 써보자.정의된 함수에 인자를 고정한 새로운 함수를 선언하는 방법이다. 코드Sourcepartial 함수는 사용자가 정의한 인자들을 미리 받아놓는다newfunc가 선언될 때 *fargs와 **newkeywords가 override되어 newfunc를 반환한다.이때 newfunc는 callable한 객체를 리턴한다.def partial(func, /, *args, **keywords): # *args, **keywords: 미리 설정해 놓는 파라미터 def newfunc(*fargs, **fkeywords): # *fargs, **fkeywords: 나중에 설정할 파라미터..
이 세상안엔 수 많은 진실과 거짓이 의도적으로 꾸며진 탈을 쓰고 세상을 돌아다니고 있다. 무엇이 진실이고 거짓인가를 판단하는 것은 이제는 정보를 소비하는 수신인의 책임이 된 것 같다. 모든 정보의 근원은 관찰되는 모든 것의 현상들이다. 누군가에 의해 관찰된 현상들은 전달의 가치를 지니는가 그렇지 않은가에 대한 가치 판단을 통과해야 한다. 그러한 현상들은 정보가 되어 매개체를 통해 수용자에게 전달되는데, 수신되는 정보가 유통되는 과정에서 얼만큼의 변조가 일어났는지는 알 턱이 없다. 가장 오래된 성서조차 관찰된 역사에 뿌리를 두고 있을텐데,세대를 거듭하여 전승되는 과정에서 모세가 홍해를 갈랐다는정보는 과연 진실일 지 명확하게 증명할 수도, 믿을 수도 없다. 우리는 오염되지 않은 진실을 원하는 경향이 있다..