1

在 jupyter Notebook 中,我试图在嵌套函数上使用 %lprun 但我没有成功。

以下代码,在笔记本单元格中

def outerfoo():
    def innerfoo():
        print("Hello World")
        print("Good Bye")
    innerfoo()

%lprun -f outerfoo().innerfoo outerfoo()

输出消息(Hello World 和 GoodBye),但在出现此错误后:
UsageError: Could not find function 'outerfoo().innerfoo'。
AttributeError:“NoneType”对象没有属性“innerfoo”

和这个,

def outerfoo():
    def innerfoo():
        print("Hello World")
        print("Good Bye")
    %lprun -f innerfoo innerfoo()


outerfoo()

不打印消息并给出此错误:
UsageError: Could not find function 'innerfoo'。NameError:名称“innerfoo”未定义

怎么可能配置文件innerfoo

4

1 回答 1

1

我认为您不能在实际的 Python 代码中使用笔记本魔术,因此%lprun在功能块内部使用可能永远不会起作用。相反,您可以存储对本地函数的全局引用,然后lprun

ref = None
def outerfoo():
    global ref
    def innerfoo():
        print("Hello World")
        print("Good Bye")
    innerfoo()
    ref = innerfoo

# Must be called for `ref` to exist.
outerfoo()

%lprun -f ref ref()

但这一切都让人感觉很恶心。您可能不应该首先创建嵌套函数。

于 2021-12-10T10:54:23.157 回答