나중에 정의된 함수에 대한 이름 오류를 방지하기 위한 Python의 선언 전달
Python에서 함수가 정의되기 전에 호출하려고 하면 결과가 발생할 수 있습니다. NameError에서. 코드 재구성이 유일한 해결책처럼 보일 수 있지만 대체 접근 방식도 있습니다.
한 가지 방법은 호출을 별도의 함수 내에 래핑하여 함수를 전방 선언하는 것입니다. 이를 통해 함수가 정의되기 전에 NameError를 발생시키지 않고 호출할 수 있습니다.
예를 들어 다음 코드는 실패합니다.
<code class="python">print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))</code>
cmp_configs 함수가 아직 정의되지 않았기 때문입니다. 이를 전달 선언하기 위해 호출을 래핑할 수 있습니다.
<code class="python">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(): ...</code>
이제 cmp_configs()가 정의되기 전에ward_declare_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>
재귀 호출을 전달 선언하려면 중첩 함수 접근 방식을 사용할 수 있습니다.
<code class="python">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()()</code>
기억하세요. 유용합니다. Python의 일반적인 규칙은 함수를 처음 사용하기 전에 정의하는 것입니다.
위 내용은 전방 선언이 Python에서 나중에 정의되는 함수에 대한 NameError를 방지하는 데 어떻게 도움이 될 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!