Python2闭包问题

简介: Python2 中的闭包比较怪异,和javascript中的闭包不大一样,这里说明一下。 不少内容引自http://www.cnblogs.com/vamei/archive/2012/12/15/2772451.html这篇文章,加以说明。

Python2 中的闭包比较怪异,和javascript中的闭包不大一样,这里说明一下。

不少内容引自http://www.cnblogs.com/vamei/archive/2012/12/15/2772451.html这篇文章,加以说明。

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 = 15
def line(x):
if(b>10):
b=50;
return 2 * x + b
return line # return a function object
my_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中,方式很多,但是就是不能直接出现对外部函数局部变量直接赋值的语句。

目录
相关文章
|
6月前
|
数据安全/隐私保护 Python
Python中装饰器、回调函数、闭包、派生的区别与应用详解
Python中装饰器、回调函数、闭包、派生的区别与应用详解
66 0
|
7月前
|
存储 自然语言处理 Python
Python闭包(Python Closures)介绍
介绍python的闭包语法。
49 0
Python闭包(Python Closures)介绍
|
16天前
|
人工智能 机器人 测试技术
【python】python闭包的详细解读(傻瓜式教学)
【python】python闭包的详细解读(傻瓜式教学)
|
1月前
|
存储 程序员 Python
Python教程第9章 | 通俗易懂学闭包
本文通过一个需求探讨闭包的基本概念与用法,帮助快速理解闭包。
14 0
|
2月前
|
自然语言处理 安全 Python
Python中的闭包和高阶函数详解
Python中的闭包和高阶函数详解
|
2月前
|
Python
在Python中,如何创建和使用闭包?
在Python中,如何创建和使用闭包?
|
2月前
|
自然语言处理 Python
在Python中,什么是闭包?
在Python中,什么是闭包?
|
3月前
|
Python
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
20 0
|
8月前
|
Python
|
4月前
|
Python
Python 基础知识:解释 Python 的装饰器和函数闭包的关系。
Python 基础知识:解释 Python 的装饰器和函数闭包的关系。
25 0

热门文章

最新文章