从父函数获取变量

时间:2019-09-24 10:28:49

标签: python

我有一个函数可以产生另一个函数。

def make_func(greeting):
    def func(name):
        return greeting + " " + name
    return func

>>> say_hello = make_func("Hello")
>>> say_hello("there")
"Hello there"

在脚本的其他地方,我可以访问say_hello,但是我不知道该函数中的实际问候是什么。我想找出答案。

name当然是不可能获得的,因为它是在调用函数时指定的。但是greeting is static,因为它是在函数外部定义的。

我可以检查一下say_hello的某些属性以获取原始的"Hello"吗?

2 个答案:

答案 0 :(得分:2)

您可以找到有关如何在python here中编译内部函数的很好的解释

那么获取变量的最简单方法是say_hello.__closure__[0].cell_contents

答案 1 :(得分:1)

您只需将属性greeting存储在func中:

def make_func(greeting):
    def func(name):
        return func.greeting + " " + name
    func.greeting = greeting
    return func

say_hello = make_func("Hello")
print(say_hello.greeting)  # Hello
say_hello.greeting = 'Bye'
print(say_hello('there'))  # Bye there