3

假设您function在 Python 中有一些通过循环工作的函数:例如,它可能是一个计算某个数学表达式的函数,例如x**2,对于数组中的所有元素,例如([1, 2, ..., 100])(显然这是一个玩具示例)。是否可以编写一个代码,使得每次function循环并获得结果时,执行一些代码,例如print("Loop %s has been executed" % i)?因此,在我们的示例中,当x**1已计算时,程序会打印Loop 1 has been executed,然后在x**2已计算时,它会打印Loop 2 has been executed,依此类推。

请注意,困难来自我没有编写函数的事实,它是某个包中预先存在的函数(更具体地说,我感兴趣的函数GridSearchCV来自 package scikit learn)。

4

2 回答 2

10

最简单的方法是将函数的代码复制到您自己的函数中,对其进行调整,然后使用它。在您的情况下,您必须继承GridSearchCV 并覆盖该_fit方法。这种方法的问题是它可能无法在软件包升级后存活。

在您的情况下,这不是必需的。您可以在创建对象时指定详细级别:

GridSearchCV(verbose=100)

我不完全确定详细数字本身的含义。这是内部使用的打印中的文档:

详细级别:如果非零,则打印进度消息。超过 50,输出被发送到标准输出。消息的频率随着详细程度的增加而增加。如果超过 10,则报告所有迭代。

如果您真的想知道数字的作用,可以查看源代码verbosity。我说不出来。

于 2016-01-09T18:17:40.920 回答
1

您可能会使用猴子补丁(“猴子”,因为它很hacky)

假设库函数是

def function(f):
    for i in range(100):
        i**2

并且您想输入打印语句,您需要将整个函数复制到您自己的文件中,并进行微小的编辑:

def my_function(f):
    for i in range(100):
        i**2
        print ("Loop %s" % i)

现在覆盖库函数:

from library import module
module.existing_function = my_function

显然这不是一个易于维护的解决方案(如果您的目标库升级了,您可能必须再次执行此过程),因此请确保仅将其用于临时调试目的。

于 2016-01-09T18:12:19.417 回答