我试图了解这个片段:
def a_func(a, b, c):
print "a: %s\nb: %s\nc: %s" %(a, b, c)
def partial(fn, *args):
print "Args in partial : %s" %str(args)
def fn_part(*fn_args):
print "fn_args in fn_part : %s" %fn_args
return fn(*args+fn_args)
return fn_part
print_fn = partial(a_func, 'A', 'B')
print_fn('C')
输出结果为:
Args in partial : ('A', 'B')
fn_args in fn_part : C
a: A
b: B
c: C
控制如何在这里流动?
函数对象print_fn
指向fn_part
,但也预定义了一些变量(a
和b
)。如何查看已为函数定义的变量?
答案 0 :(得分:0)
fn_part()
函数将args
作为闭包进行访问。您可以从返回的函数对象中读取它们:
>>> print_fn = partial(a_func, 'A', 'B')
Args in partial : ('A', 'B')
>>> print_fn.__closure__
(<cell at 0x102a90be8: tuple object at 0x10075bf38>, <cell at 0x102a901d8: function object at 0x102aa1848>)
>>> print_fn.__closure__[0].cell_contents
('A', 'B')
你无法改变关闭;您将创建一个新的 partial()
对象,或者直接调用原始函数。