我有一个函数可以产生另一个函数。
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"
吗?
答案 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