在 Python 中转发声明以防止稍后定义的函数出现名称错误
在 Python 中,尝试在定义之前调用函数可能会导致在名称错误中。虽然代码重组似乎是唯一的解决方案,但还有其他方法。
一种方法是通过将函数的调用包装在单独的函数中来前向声明函数。这允许在定义函数之前调用该函数,而不会触发 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() 之前调用forward_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