클로저를 사용하는 가장 간단한 예는 무엇인가라는 태닝입니다. 기본적으로 두 개의 인자 인 a
과 b
을 호출 할 때 함께 덧붙인 함수 인 f()
을 가정 해 봅시다.
def f(a, b):
return a + b
을하지만 우리는 한 번에 하나 개의 인수로 f()
를 호출 할 것인지, 인수를 위해,의 말을 보자 : 그래서, 파이썬, 우리는 가지고있다. 따라서 f(2, 3)
대신 f(2)(3)
이 필요합니다. 이것은과 같이 수행 할 수 있습니다 : 우리가 f(2)
를 호출 할 때
이제
def f(a):
def g(b): # Function-within-a-function
return a + b # The value of a is present in the scope of g()
return g # f() returns a one-argument function g()
는, 우리는 새로운 기능, g()
를 얻을; 이 새로운 함수는 범위의 변수이 f()
이므로, 은 이상의 변수를 닫습니다. 따라서 클로저라는 용어가 사용됩니다.우리가 g(3)
를 호출 할 때, (f
의 정의에 의해 바인딩) 변수 a
은 2 + 3 => 5
이 여러 시나리오에서 유용 반환 g()
에 의해 액세스 할 수 있습니다. 나는 많은 인수를 받아,하지만 그들 중 몇이 나에게 유용했다 기능을 가지고 예를 들어, 나는 그렇게 같은 일반적인 기능을 작성할 수
def many_arguments(a, b, c, d, e, f, g, h, i):
return # SOMETHING
def curry(function, **curry_args):
# call is a closure which closes over the environment of curry.
def call(*call_args):
# Call the function with both the curry args and the call args, returning
# the result.
return function(*call_args, **curry_args)
# Return the closure.
return call
useful_function = curry(many_arguments, a=1, b=2, c=3, d=4, e=5, f=6)
useful_function
이제 함수 인 경우에만 9 대신 3 개의 인수가 필요합니다. 자신을 반복하지 않아도되고
일반 솔루션을 만들었습니다. 다른 많은 인수 함수를 작성하면
curry
도구를 다시 사용할 수 있습니다.
저는 폐쇄 패턴을 통해 간결한 방식으로 구현할 수있는 디자인 패턴에 대한 링크를 살펴볼 수 있다고 생각합니다. [클로저 디자인 패턴 게시] (http://arturoherrero.com/2012/04/25/closure -design-patterns /) – Sudarshan
이와 같은 질문이 끝나면 커뮤니티에 불행합니다. 이것은 매우 합리적인 질문이며 많은 학습 폐쇄 - 어려운 주제 -가 가질 것입니다. 실제 사용 사례를 이해하는 것은 어려운 주제에 대한 학습 곡선을 가속화하는 좋은 방법입니다. 고맙게도 닫혀지기 전에 많은 위대한 해답이있었습니다. – Matt