递归调用而不使用函数名称

时间:2019-11-08 20:33:22

标签: python recursion

如下面的代码所示,如​​果删除了原始函数,则使用函数名称的递归调用将失败。

有没有办法通过thisself之类的东西来引用函数本身?

>>> 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

1 个答案:

答案 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)