python:低估部分功能

时间:2015-10-10 11:12:30

标签: python

我试图了解这个片段:

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,但也预定义了一些变量(ab)。如何查看已为函数定义的变量?

1 个答案:

答案 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()对象,或者直接调用原始函数。