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

计算另一个方法中的python方法调用

濮阳祯
2023-03-14
问题内容

我实际上正在尝试用Java进行此操作,但是我正在自学python,这让我想知道是否存在使用包装器或类似方法进行此操作的简便/明智的方法。

我想知道一个特定方法在另一个方法中被调用了多少次。例如:

def foo(z):
    #do something
    return result

def bar(x,y):
    #complicated algorithm/logic involving foo
    return foobar

因此,对于每次使用各种参数调用bar的情况,我想知道foo被调用了多少次,也许是这样的输出:

>>> print bar('xyz',3)
foo was called 15 times
[results here]
>>> print bar('stuv',6)
foo was called 23 times
[other results here]

编辑:我知道我可以在柜台内拍一个计数器,然后在返回时丢弃它,但是如果可以使用包装器完成相同的操作,这会很酷。这也意味着我可以在其他地方重用相同的包装,而不必修改方法中的任何代码


问题答案:

听起来几乎像是装饰工的教科书示例!

def counted(fn):
    def wrapper(*args, **kwargs):
        wrapper.called += 1
        return fn(*args, **kwargs)
    wrapper.called = 0
    wrapper.__name__ = fn.__name__
    return wrapper

@counted
def foo():
    return

>>> foo()
>>> foo.called
1

您甚至可以使用另一个装饰器来自动记录一个函数在另一个函数中被调用多少次:

def counting(other):
    def decorator(fn):
        def wrapper(*args, **kwargs):
            other.called = 0
            try:
                return fn(*args, **kwargs)
            finally:
                print '%s was called %i times' % (other.__name__, other.called)
        wrapper.__name__ = fn.__name__
        return wrapper
    return decorator

@counting(foo)
def bar():
    foo()
    foo()

>>> bar()
foo was called 2 times

但是,如果最终foo还是bar可以自称,那么您将需要一个涉及堆栈的更复杂的解决方案来应对递归。然后,您将走向全面的探查器…

如果您仍在“自学Python”,可能是这种包装好的装饰器材料(通常用于魔术)不是理想的选择!



 类似资料:
  • 问题内容: 我是python的新手。我试图在类中将值从一种方法传递给另一种方法。我搜索了该问题,但无法获得适当的解决方案。因为在我的代码中,“ if”正在调用类的方法“ on_any_event”,而该方法反过来应该调用我的另一个方法“ dropbox_fn”,该方法利用了“ on_any_event”中的值。如果“dropbox_fn”方法在类之外,它将起作用吗? 我将用代码说明。 这里的主要问

  • 我在我的服务层有一个方法: [1]这一行获取条形码,比如然后调用另一个类中的一个方法,该方法从数据库中检索有关该项目的信息,执行计算并返回价格。可能的值可以类似于。 [2]按价格对所有值进行升序排序。因此,如果列表包含和和,则将其排序为和。 当我尝试测试此方法时,当调用时,我得到空指针异常。我如何测试这个方法?我试着搜索并找到了一些关于使用mockito的问题和答案,但我不知道如何实现它。 我目前

  • 我创建了两个类:和。下面是进行计算的方法: 这里是一个调用并显示结果的函数,不幸的是,我无法根据这本书要求它运行的方式来运行它。 任何提示都会帮助我在我的再教育过程中。

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 问题内容: 我有 但后来当我打电话从通过运行以下命令在命令行上,JAVA抱怨说,你不能调用从静态功能的方法。 所以我的问题是:如何从主方法调用方法,如果不可能,使用java命令从命令行运行程序后,有哪些替代策略可以调用方法。 问题答案: 您只能针对类的实例调用类似的实例方法(顺便说一下,这是一个非法的方法名称): 另外,如果对您的设计有效,则也使它成为静态。

  • 我需要了解如何将方法返回到方法中,以打印出计算机的随机选择。 打印语句之后的最后一个方法不完整;我只是被这部分卡住了。