나중에 정의된 함수에 대한 이름 오류를 방지하기 위해 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