"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 전방 선언이 Python에서 나중에 정의되는 함수에 대한 NameError를 방지하는 데 어떻게 도움이 될 수 있습니까?

전방 선언이 Python에서 나중에 정의되는 함수에 대한 NameError를 방지하는 데 어떻게 도움이 될 수 있습니까?

2024-11-09에 게시됨
검색:655

How Can Forward Declarations Help Prevent NameErrors for Functions Defined Later in Python?

나중에 정의된 함수에 대한 이름 오류를 방지하기 위해 Python에서 선언을 전달

Python에서 함수가 정의되기 전에 호출하려고 하면 결과가 발생할 수 있음 NameError에서. 코드 재구성이 유일한 해결책처럼 보일 수 있지만 대체 접근 방식도 있습니다.

한 가지 방법은 호출을 별도의 함수 내에 래핑하여 함수를 전방 선언하는 것입니다. 이를 통해 함수가 정의되기 전에 NameError를 발생시키지 않고 호출할 수 있습니다.

예를 들어, 다음 코드는 실패합니다:

print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))

cmp_configs 함수가 아직 정의되지 않았기 때문입니다. 이를 전달 선언하기 위해 호출을 래핑할 수 있습니다:

def forward_declare_cmp_configs():
    print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))

forward_declare_cmp_configs()

def cmp_configs():
    ...

이제 cmp_configs()가 정의되기 전에ward_declare_cmp_configs() 함수를 호출할 수 있으며 원래 코드는 오류 없이 실행됩니다.

앞으로 선언이 유용한 또 다른 시나리오는 다음과 같습니다. 재귀 함수. 예를 들어, 다음 코드는 실패합니다:

def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()

재귀 호출을 전달 선언하기 위해 중첩 함수 접근 방식을 사용할 수 있습니다:

def spam_outer():
    def spam_inner():
        if end_condition():
            return end_result()
        else:
            return eggs()

    def eggs():
        if end_condition():
            return end_result()
        else:
            return spam_inner()

    return spam_inner()

spam_outer()()

앞으로 선언하는 것이 유용할 수 있지만 Python의 일반적인 규칙은 함수를 처음 사용하기 전에 정의하는 것입니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3