Python에서 나중에 정의된 함수를 호출할 때 NameError를 어떻게 방지할 수 있나요?

Susan Sarandon
풀어 주다: 2024-10-30 16:04:17
원래의
233명이 탐색했습니다.

How Can You Avoid NameErrors When Calling Functions Defined Later in Python?

NameError를 방지하기 위한 함수 전달

코드 후반부에 정의된 함수를 호출하려고 할 때 NameError 예외가 발생하면 실망스러울 수 있습니다. Python의 정의 순서는 일반적으로 선언 전에 함수 사용을 금지하지만, 특정 기술을 사용하면 이 제한을 피할 수 있습니다.

예를 들어, 아직 정의되지 않은 사용자 정의 cmp_configs 함수를 사용하여 목록을 정렬하려면 Python의 즉시 함수 기능을 사용할 수 있습니다.

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

def cmp_configs(x, y):
    ...  # Function implementation</code>
로그인 후 복사

이 시나리오에서는 정렬된 함수 호출이 별도의 함수 내에 래핑되어 cmp_configs 정의에 대한 즉각적인 필요성을 해결합니다. 외부 함수가 호출되면 sorted와 cmp_configs가 모두 정의되어 적절한 실행이 보장됩니다.

앞으로 선언하는 함수가 필요한 또 다른 일반적인 상황은 재귀입니다. 다음 예를 고려하십시오.

<code class="python">def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()</code>
로그인 후 복사

이 재귀 패턴이 발생하면 스팸 전에 계란 정의를 이동하면 문제가 해결될 것이라고 가정할 수 있습니다. 그러나 두 함수 사이의 순환 종속성으로 인해 이 접근 방식에서는 여전히 NameError가 발생합니다.

이 특정 상황을 해결하기 위해 사용자 정의 함수를 계란 함수 자체 내에 배치할 수 있습니다.

<code class="python">def eggs():
    if end_condition():
        return end_result()
    else:
        def spam():
            if end_condition():
                return end_result()
            else:
                return eggs()
        return spam()  # Explicitly calling the inner 'spam' function</code>
로그인 후 복사

또는 람다 식을 사용하여 동일한 결과를 얻을 수 있습니다.

<code class="python">def eggs():
    if end_condition():
        return end_result()
    else:
        return lambda: spam()  # Returns a callable object that implements spam</code>
로그인 후 복사

요약하면 일반적으로 함수 정의의 사용 전 원칙을 준수하지만 함수를 앞으로 선언하는 것이 불가피한 시나리오가 있습니다. . 프로그래머는 즉각적인 함수나 람다 표현식을 활용하여 이러한 제한을 피하고 기능을 손상시키지 않으면서 원하는 코드 구조를 유지할 수 있습니다.

위 내용은 Python에서 나중에 정의된 함수를 호출할 때 NameError를 어떻게 방지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!