Python의 중첩 함수
함수는 프로그램에서 반복해서 호출 할 수있는 코드 블록입니다. 다른 인수를 허용하고 유용한 값을 반환 할 수 있습니다. 모든 프로그래밍 언어에는 내장 함수와 사용자 정의 함수가 있습니다.
이 자습서에서는 Python에서 중첩 함수를 만들고 사용하는 방법을 배웁니다.
대부분의 언어는 중첩 된 함수의 사용 및 생성을 지원합니다. 이름에서 알 수 있듯이 중첩 함수는 함수 내의 함수입니다. 내부에 중첩 된 함수를 내부 함수라고하고 둘러싸는 함수를 외부 함수라고합니다.
다음 코드에서는 기본 중첩 함수를 만듭니다.
def outer_f(s):
def inner_f(s):
print(s)
inner_f(s)
outer_f("Nested")
출력:
Nested
위의 예를 사용하여 중첩 함수 사용에 대해 약간의 아이디어를 얻을 수 있습니다. 외부 세계에서 함수를 숨기고 데이터 캡슐화를 구현하는 데 사용할 수 있습니다.
알아야 할 또 다른 사항은 중첩 함수가 외부 함수에서 사용되는 변수를 사용할 수 있다는 것입니다. 이러한 변수를 비 로컬이라고합니다. 중첩 함수는 액세스 할 수 있지만 수정해야하는 경우nonlocal
키워드를 사용해야합니다.
다음 예를 보겠습니다.
def outer_f():
s = 5
def inner_f():
nonlocal s
s = s + 1
return s
return inner_f()
print(outer_f())
출력:
6
여기서nonlocal
키워드를 사용하지 않고s
변수를 수정할 수 없습니다.
이제 중첩 함수가 어떤 값을 반환한다고 상상해보십시오. 이것은 중첩 함수의 또 다른 유용한 기능이며 클로저 함수입니다. 이러한 함수는 중첩 함수를 사용하여 동적으로 생성됩니다. 데이터 숨김을 구현하고 클래스의 대안으로 사용하는 우아하고 간결한 방법 일 수 있습니다.
다음 코드를 참조하십시오.
def incrementer(x):
def inc(y):
return x + y
return inc
by4 = incrementer(4)
by5 = incrementer(5)
print(by4(5), by5(5))
출력:
9 10
이제 위의 코드에서 숫자를 증가시키는 동적 메서드를 만듭니다. by4
및by5
는 중첩 함수를 사용하여 생성 된 두 개의 클로저 함수입니다. 이는 주로 중첩 된 함수가 상태를 유지하는 능력 때문입니다. 너무 많은 속성이 관련되지 않은 경우 클래스 및 전역 변수에 대한 적절한 대안이 될 수 있습니다. __closure__
속성을 사용하여 함수가 클로저인지 알아낼 수 있습니다. 모든 함수에는이 속성 광고가 있으며 클로저 함수와 함께 사용할 때 일부 셀 객체를 반환합니다.
중첩 함수는 데코레이터 함수에도 사용됩니다. 데코레이터 함수는 클래스, 함수와 같은 호출 가능한 객체를 사용하고 다른 객체를 반환합니다. 이러한 호출 가능한 객체 앞에 데코레이터를 사용하려면@
기호를 사용합니다. 이렇게하면 콜 러블 객체를 데코레이터 함수의 인수로 가져와 사용합니다.
다음 예제에서 이것을 더 잘 이해하기 위해 매우 간단한 데코레이터 함수를 만듭니다.
def dec(func):
def inner():
print("Hello")
func()
return inner
@dec
def world():
print("world")
world()
출력:
Hello
world
위의 예에서dec()
라는 간단한 데코레이터 함수를 만들었습니다.이 함수는world()
함수를 인수로 사용하고 추가 메시지를 인쇄하여 데코레이션합니다.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn