Python2闭包问题
2024-10-12 19:15:47
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中,方式很多,但是就是不能直接出现对外部函数局部变量直接赋值的语句。
最新文章
- saltstack初探
- 【翻译二十】-java线程池
- Win10安装framework3.5
- sql server 查询性能最差的sql语句
- android 获取activity 的name
- 帝国cms刷洗内容页提示.phome_ecms_news_data_' doesn't exist
- 以k个元素为一组反转单链表
- C++中用rand()和srand()产生随机数方法介绍
- 部署statspack工具(一)
- hadoop全分布式环境搭建
- C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
- html案例详解(一)
- python数据库多字段插入
- border-image属性把边框的背景设置为图片
- 第十五节、韦伯局部描述符(WLD,附源码)
- 赵丽颖固然漂亮,可这份Hadoop核心教程也不差呀
- MySQL删除数据库时的错误(errno: 39)
- ubuntu安装zeromq
- C#Encoding
- 三、python小功能记录——杀掉进程
热门文章
- Zabbix配置微信报警通知
- 表有外键所以delete报错了,这里有2种办法处理:
- unix下网络编程之I/O复用(五)
- 用Json Template在Azure上创建Cisco CSR路由器
- POJ2230(打印欧拉回路)
- Linux网络工具lsof和netstat
- 人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&;OpenCV人脸检测方法及对比)
- Windows安装mysql 5.7.*.zip步骤
- xcode编写c/c++静态库使用系统头文件问题
- linux进程的软中断通信