本文共 784 字,大约阅读时间需要 2 分钟。
Python2 中的闭包比较怪异,和javascript中的闭包不大一样,这里说明一下。
不少内容引自这篇文章,加以说明。
def line_conf():
b = 15
def line(x):
return 2*x+b
return line # return a function object
b = 5 my_line = line_conf()
print(my_line(5))
这段代码可以正常运行,结果为25
但是下面这个就不行
def line_conf():
b = 15def line(x):if(b>10): b=50;return 2 * x + breturn line # return a function objectmy_line = line_conf()print(my_line(5))就会提示如下错误:
UnboundLocalError: local variable 'b' referenced before assignment
这是因为在line函数中对b进行了赋值,python就认为这个是一个局部变量(如果想修改全局变量,就必须进行global声明)。
如果还想这个方法可以使用,就必须将b声明为全局变量。如下:
b=10 def line_conf(): global b; b = 15 def line(x): global b; if(b>10): b=50; return 2 * x + b return line # return a function object my_line = line_conf() print(my_line(5))
当然如果你不想进行全局变量声明,就把b放进list中,方式很多,但是就是不能直接出现对外部函数局部变量直接赋值的语句。
转载地址:http://kofva.baihongyu.com/