복붙노트

[PYTHON] 파이썬 팩토리 함수는 클래스와 비교된다.

PYTHON

파이썬 팩토리 함수는 클래스와 비교된다.

그냥 파이썬 학습을 통해 작업하고 중첩 된 / 팩토리 함수 (간단한 예제)를 살펴보기 시작했습니다.

def maker(N):
    def action(X):
        return X * N
    return action

클래스를 만드는 것보다 factory 함수의 장점이 있습니까? 공연? 기억? 청소 해?

해결법

  1. ==============================

    1.중첩 된 함수에 대해 가장 좋아하는 것은 클래스보다 덜 장황하다는 것입니다. 제작자 함수에 해당하는 클래스 정의는 다음과 같습니다.

    중첩 된 함수에 대해 가장 좋아하는 것은 클래스보다 덜 장황하다는 것입니다. 제작자 함수에 해당하는 클래스 정의는 다음과 같습니다.

    class clsmaker(object):
        def __init__(self, N):
            self.N = N
        def __call__(self, X):
            return X * self.N
    

    당신이 생성자에 더 많은 인수를 추가하기 전까지는 그렇게 나쁘지 않습니다. 그런 다음 클래스 방법을 사용하면 각 인수에 대해 추가 행이 필요하지만 함수는 추가 인수를 얻습니다.

    중첩 된 함수에도 속도 이점이 있다는 것이 밝혀졌습니다.

    >>> T1 = timeit.Timer('maker(3)(4)', 'from __main__ import maker')
    >>> T1.timeit()
    1.2818338871002197
    >>> T2 = timeit.Timer('clsmaker(3)(4)', 'from __main__ import clsmaker')
    >>> T2.timeit()
    2.2137160301208496
    

    중첩 된 함수 버전과 관련된 opcode가 적어지기 때문일 수 있습니다.

    >>> dis(clsmaker.__call__)
      5           0 LOAD_FAST                1 (X)
                  3 LOAD_FAST                0 (self)
                  6 LOAD_ATTR                0 (N)
                  9 BINARY_MULTIPLY     
                 10 RETURN_VALUE        
    >>> act = maker(3)
    >>> dis(act)
      3           0 LOAD_FAST                0 (X)
                  3 LOAD_DEREF               0 (N)
                  6 BINARY_MULTIPLY     
                  7 RETURN_VALUE  
    
  2. ==============================

    2.함수 팩토리를 클래스와 비교하는 것은 사과와 오렌지를 비교하는 것입니다. 객체라고 부르는 데이터와 함수의 응집력있는 콜렉션을 가지고 있다면 클래스를 사용하십시오. 함수가 필요한 경우 함수 팩터 리를 사용하고 함수의 생성을 매개 변수화하려고합니다.

    함수 팩토리를 클래스와 비교하는 것은 사과와 오렌지를 비교하는 것입니다. 객체라고 부르는 데이터와 함수의 응집력있는 콜렉션을 가지고 있다면 클래스를 사용하십시오. 함수가 필요한 경우 함수 팩터 리를 사용하고 함수의 생성을 매개 변수화하려고합니다.

    두 기술의 선택은 코드의 의미에 달려 있습니다.

  3. ==============================

    3.중첩 기능을 사용하면 즉시 사용자 지정 기능을 만들 수 있습니다.

    중첩 기능을 사용하면 즉시 사용자 지정 기능을 만들 수 있습니다.

    예를 들어보세요. 장식. 결과 함수는 작성시 바인드 된 변수에 따라 달라지며 나중에 변경할 필요가 없습니다. 그래서이 목적을 위해 수업을 사용하는 것이 덜 합리적입니다.

  4. from https://stackoverflow.com/questions/901892/python-factory-functions-compared-to-class by cc-by-sa and MIT license