当前位置: 首页 > 面试题库 >

Python方法可以检查它是否已经从内部调用吗?

仇正豪
2023-03-14
问题内容

假设我有一个Python函数ffhelpfhelp旨在以递归方式调用自身。f不应递归调用。有没有办法f确定是否已递归调用它?


问题答案:

为此使用追溯模块:

>>> import traceback
>>> def f(depth=0):
...     print depth, traceback.print_stack()
...     if depth < 2:
...         f(depth + 1)
...
>>> f()
0  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
 None
1  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
  File "<stdin>", line 2, in f
 None
2  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
  File "<stdin>", line 4, in f
  File "<stdin>", line 2, in f
 None

因此,如果堆栈中的任何条目指示从f调用了代码,则该调用是(间接)递归的。该traceback.extract_stack方法使您可以轻松访问此数据。if len(l[2] ...下面的示例中的语句仅计算函数名称的完全匹配数。为了使它更漂亮(感谢agf的想法),您可以将其变成装饰器

>>> def norecurse(f):
...     def func(*args, **kwargs):
...         if len([l[2] for l in traceback.extract_stack() if l[2] == f.func_name]) > 0:
...             raise Exception, 'Recursed'
...         return f(*args, **kwargs)
...     return func
...
>>> @norecurse
... def foo(depth=0):
...     print depth
...     foo(depth + 1)
...
>>> foo()
0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in func
  File "<stdin>", line 4, in foo
  File "<stdin>", line 5, in func
Exception: Recursed


 类似资料:
  • 本文向大家介绍是否可以从一个static方法内部发出对非static方法的调用?相关面试题,主要包含被问及是否可以从一个static方法内部发出对非static方法的调用?时的应答技巧和注意事项,需要的朋友参考一下 不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个stati

  • 为什么不检查它是否可以分配内存? 摘自: 如果分配导致堆栈溢出,则程序行为未定义。…如果无法扩展堆栈帧,则没有错误指示。 现在和都返回一个指针,指向新分配的内存的开始,这意味着它们都必须知道堆栈/堆在当前时刻的结束位置。实际上,来自: 调用增量为0的sbrk()可以用来查找程序中断的当前位置。 因此,按照我的理解,检查是否可以分配所需的内存,本质上归结为检查堆栈的当前末端和堆的当前末端之间是否有足

  • 我正在努力使倒计时功能,这将停止时,计时器达到0。到目前为止发生的是,当计时器到达0(我没有按任何键)时,它一直向我发送默认的消息,直到我单击一个按钮,它才停止。 我想在中插入一些代码,这将停止计时器(一旦它为零,显示消息并停止向我发送垃圾邮件)。我已经尝试了等的多个变体。 当前上下文中不存在名称“计时器”。 代码:

  • 我有一个角度服务公开了一个公共方法。在它的主体中,可以根据条件调用两个不同的私有方法 如何根据传递给公共方法的输入参数,与jasmine一起检查是否调用了一个或另一个方法?我知道我们不应该测试私有方法,但实际上在这里我只想验证公共方法是否调用了正确的私有方法。我不想公开私有方法,因为我只希望服务提供一个访问点。 我的服务方式: } 茉莉花试验: });

  • 问题内容: 我知道jython允许我们从任何Java的类文件中调用Java方法,就好像它们是为python编写的一样,但是相反的可能吗? 我已经有很多用python编写的算法,它们在python和jython上都可以很好地工作,但是它们缺少适当的GUI。我计划将GUI与Jav​​a一起使用,并保持python库完整。我无法使用jython或python编写良好的GUI,也无法使用python编写良

  • 我有3个子类,每个都有唯一的ImagePath。 因此,我实现了,因为所有实例共享相同的映像。 问题就在这里。我想从父实例调用子静态方法。 当然,我可以使用调用基于类的静态方法。 假设我有10个子类,使用if-else语句并逐个调用它并不容易。 在Java中有没有办法从父实例调用子静态方法??