Python의 중첩 함수

Manav Narula 2023년10월10일
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

이제 위의 코드에서 숫자를 증가시키는 동적 메서드를 만듭니다. by4by5는 중첩 함수를 사용하여 생성 된 두 개의 클로저 함수입니다. 이는 주로 중첩 된 함수가 상태를 유지하는 능력 때문입니다. 너무 많은 속성이 관련되지 않은 경우 클래스 및 전역 변수에 대한 적절한 대안이 될 수 있습니다. __closure__속성을 사용하여 함수가 클로저인지 알아낼 수 있습니다. 모든 함수에는이 속성 광고가 있으며 클로저 함수와 함께 사용할 때 일부 셀 객체를 반환합니다.

중첩 함수는 데코레이터 함수에도 사용됩니다. 데코레이터 함수는 클래스, 함수와 같은 호출 가능한 객체를 사용하고 다른 객체를 반환합니다. 이러한 호출 가능한 객체 앞에 데코레이터를 사용하려면@기호를 사용합니다. 이렇게하면 콜 러블 객체를 데코레이터 함수의 인수로 가져와 사용합니다.

다음 예제에서 이것을 더 잘 이해하기 위해 매우 간단한 데코레이터 함수를 만듭니다.

def dec(func):
    def inner():
        print("Hello")
        func()

    return inner


@dec
def world():
    print("world")


world()

출력:

Hello
world

위의 예에서dec()라는 간단한 데코레이터 함수를 만들었습니다.이 함수는world()함수를 인수로 사용하고 추가 메시지를 인쇄하여 데코레이션합니다.

작가: Manav Narula
Manav Narula avatar Manav Narula avatar

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

관련 문장 - Python Function