如下面的代码所示,如果删除了原始函数,则使用函数名称的递归调用将失败。
有没有办法通过this
或self
之类的东西来引用函数本身?
>>> def count_down(cur_count):
... print(cur_count)
... cur_count -= 1
... if cur_count > 0:
... count_down(cur_count)
... else:
... print('Ignition!')
...
>>> count_down(3)
3
2
1
Ignition!
>>> zaehle_runter = count_down
>>> zaehle_runter(2)
2
1
Ignition!
>>> del count_down
>>> zaehle_runter(2)
2
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 5, in count_down
NameError: name 'count_down' is not defined
答案 0 :(得分:3)
当您递归调用函数时,将在(全局)范围内搜索函数名称。
由于该名称已被删除,因此无法找到。
要解决此问题,您可以创建一个执行递归工作的内部函数。这使您的递归函数不受此删除的影响,因为它不再是递归的,而只是调用内部递归函数
def count_down(cur_count):
def internal_count_down(cur_count):
cur_count -= 1
if cur_count > 0:
internal_count_down(cur_count)
else:
print('Ignition!')
internal_count_down(cur_count)