복붙노트

[PYTHON] 다중 매개 변수 괄호가있는 파이썬 함수

PYTHON

다중 매개 변수 괄호가있는 파이썬 함수

나는 h (a) (b)가 무엇을 의미하는지 이해하는데 어려움을 겪고있다. 나는 어제 이전에 그것들 중 하나를 본 적이 없었으며, 나는 이런 식으로 함수를 선언 할 수 없었다 :

def f (a)(b):
    return a(b)

def f (a, b) : 할 때도 작동하지 않았습니다. 이 기능들은 무엇을합니까? 어떻게 선언 할 수 있습니까? 그리고 마지막으로 f (a, b)와 f (a) (b)의 차이점은 무엇입니까?

해결법

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

    1.다중 매개 변수 대괄호가있는 함수는 정의 할 때 보았 듯이 존재하지 않습니다. 그러나 (다른) 함수를 반환하는 함수가 있습니다.

    다중 매개 변수 대괄호가있는 함수는 정의 할 때 보았 듯이 존재하지 않습니다. 그러나 (다른) 함수를 반환하는 함수가 있습니다.

    def func(a):
        def func2(b):
            return a + b
        return func2
    

    이제 func ()를 호출하면 내부 func2 함수가 반환됩니다.

    >>> func2 = func(1)  # You don't have to call it func2 here
    >>> func2(2)
    3
    

    그러나 나중에 내부 함수가 필요 없다면 변수에 저장할 필요가 없으며 하나씩 호출 할 수 있습니다.

    >>> func(1)(2)   # func(1) returns func2 which is then called with (2)
    3
    

    인수를 취하는 데코레이터를 정의 할 때 매우 일반적인 관용구입니다.

    func ()를 호출하면 func의 정의 안에 func2라는 이름이 있지만 항상 새로운 내부 함수가 만들어집니다.

    >>> f1 = func(1)
    >>> f2 = func(1)
    >>> f1(1), f2(1)
    (2, 2)
    >>> f1 is f2
    False
    

    f (a) (b)가하는 일을 알고 있지만 요약하면 이제 분명해야합니다.

  2. ==============================

    2.f (a) (b)는 f (a)가 호출 할 수있는 값을 반환한다는 것을 의미합니다. 짧은 형태의

    f (a) (b)는 f (a)가 호출 할 수있는 값을 반환한다는 것을 의미합니다. 짧은 형태의

    g = f(a)
    g(b)
    

    하나의 구문 구조가 아니라는 것을 강조하기 위해 여분의 괄호 쌍을 추가하는 것이 더 편할 수도 있습니다.

    (f(a))(b)  # f(a) is evaluated first, then the result is applied to b
    

    중첩 된 사전을 인덱싱하기 위해 대괄호를 두 배로 두는 것과 정확히 비슷합니다.

    d1[x][y]
    

    ~에 해당합니다.

    d2 = d1[x]
    d2[y]
    
  3. ==============================

    3.우리는 다음과 같은 식을 가질 수 있습니다.

    우리는 다음과 같은 식을 가질 수 있습니다.

    f(a)(b)
    

    그런 다음 f (a)는 인수 b로 호출 된 함수 자체를 반환합니다. 다음 예제를 고려해보십시오.

    def f(a):
       def g(b):
          return a * b
       return g
    

    f (5)는 기본적으로 함수를 반환하기 때문에 f (5) (4)는 5 * 4로 평가됩니다.

    def g(b):
       return 5 * b
    

    이제는 이런 일을 할 수 있습니다.

    mult_by_5 = f(5)
    [mult_by_5(x) for x in range(10)]
    

    좀더 중첩 된 함수는 어떨까요?

    def f(a):
      def g(b):
        def h(c):
          return a * b *c
        return h
      return g
    f(2)(3)(4) # 24
    
  4. from https://stackoverflow.com/questions/42874825/python-functions-with-multiple-parameter-brackets by cc-by-sa and MIT license