是否可以在 Python 中转发声明一个函数?我想在声明之前使用我自己的 cmp
函数对列表进行排序。
print "\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)])
我在调用之后放置了 cmp_configs
方法的定义。它失败并出现此错误:
NameError: name 'cmp_configs' is not defined
有没有办法在使用之前“声明” cmp_configs
方法?
有时,很难重组代码来避免这个问题。例如,在实现某些形式的递归时:
def spam():
if end_condition():
return end_result()
else:
return eggs()
def eggs():
if end_condition():
return end_result()
else:
return spam()
其中 end_condition
和 end_result
之前已定义。
重组代码并始终在调用之前放置定义的唯一解决方案是什么?
原文由 Nathan Fellman 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你不想在使用 之前 定义一个函数,并且 之后 定义它是不可能的,那么在其他模块中定义它呢?
从技术上讲,您仍然首先定义它,但它很干净。
您可以创建如下递归:
Python 的函数是匿名的,就像值是匿名的一样,但它们可以绑定到一个名称。
在上面的代码中,
foo()
没有调用名为 foo 的函数,它调用了一个恰好绑定到名称foo
的函数。可以在其他地方重新定义foo
,然后bar
将调用新函数。您的问题无法解决,因为这就像要求获取一个尚未声明的变量。