python:UnboundLocalError: local variable 'xxx' referenced before assignment
近来一直都在学习python语言,偶然在伯乐在线看到2017年京东C/C++的面试题。就打算用python+ST3 IDE顺便敲下面试题代码。
原题 C语言:
#include <stdio.h>
int cnt=;
int fib(int n){
cnt++;
if(n==)
return ;
else if(n==)
return ;
else
return fib(n-)+fib(n-);
}
void main()
{
fib();
printf("%d",cnt);//问题:cnt等于多少?
}
原题 python语言:
cnt = 0
def fib(n):
cnt+=1
if n==0:
return 1
if n==1:
return 2
return fib(n-1)+fib(n-2)
values = fib(8)
print cnt ,values
乍一眼看,我写的python代码没错吧。但是很囧的事情,既然我写的python代码报错了(python初学者,大家误喷)。

提示局部变量'cnt'在没有声明就引用了。后来想到python提供global关键字引用全局变量。就尝试了一番。
cnt = 0
def fib(n):
global cnt
cnt+=1
if n==0:
return 1
if n==1:
return 2
return fib(n-1)+fib(n-2)
values = fib(8)
print cnt ,values
没报错,正常运行。后来多方收集资料,针对全局变量和局部变量的使用,总结如下:
1.内部函数,不修改全局变量可以直接访问全局变量。
cnt = 0
def fib(n):
#global cnt
#cnt+=1
print cnt #直接访问全局变量,不修改,不报错
if n==0:
return 1
if n==1:
return 2
return fib(n-1)+fib(n-2)
values = fib(8)
print cnt ,values
2.内部函数,修改同名全局变量,则python会认为它是一个局部变量。如要让python认为是全局变量,使用global关键字。
cnt = 0
def fib(n):
#global cnt
cnt = n
print 'fib inside:cnt = %d' % cnt
if n==0:
return 1
if n==1:
return 2
return fib(n-1)+fib(n-2)
fib(1)
print cnt fib inside:cnt = 1
0
3.在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError。
cnt = 0
def fib(n):
#global cnt
print cnt #这行报错
cnt+=1
if n==0:
return 1
if n==1:
return 2
return fib(n-1)+fib(n-2)
values = fib(8)
print cnt ,values
python:UnboundLocalError: local variable 'xxx' referenced before assignment的更多相关文章
- python: local variable 'xxx' referenced before assignment
问题发现 xxx = 23 def PrintFileName(strFileName): if xxx == 23: print strFileName xxx = 24 PrintFileName ...
- UnboundLocalError: local variable ‘xxx‘ referenced before assignment
原因 在Python函数中调用了某个和全局变量同名的局部变量,导致编译器不知道此时使用的是全局变量还是局部变量 a = 3 def func(): a+=3 func() UnboundLocalEr ...
- Python问题:UnboundLocalError: local variable 'xxx' referenced before assignment
参考链接: http://blog.csdn.net/onlyanyz/article/details/45009697 https://www.cnblogs.com/fendou-999/p/38 ...
- 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assignment
闭包(lexical closure) 什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下 不多说,看例子: def funx(x): def funy(y): return ...
- [合集]解决Python报错:local variable 'xxx' referenced before assignment
a = 1 def use(): print(a) #输出1 引用不会报错 a = 1 def use(): a = 3 print(a) #输出 3 重新赋值也不会报错. 局部变量会优先在函数内部去 ...
- _markupbase.py if not match: UnboundLocalError: local variable 'match' referenced before assignment,分析Python 库 html.parser 中存在的一个解析BUG
BUG触发时的完整报错内容(本地无关路径用已经用 **** 隐去): **************\lib\site-packages\bs4\builder\_htmlparser.py:78: U ...
- 解决Python报错:local variable 'xxx' referenced before assignment(引)
解决Python报错:local variable 'xxx' referenced before assignment(引) 解决Python报错:local variable 'xxx' refe ...
- local variable 'xxx' referenced before assignment
这个问题很囧,在外面定义了一个变量 xxx ,然后在python的一个函数或类里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before as ...
- local variable 'xxx' referenced before assignment(犯过同样的错)
这个问题很囧,在外面定义了一个变量 xxx ,然后在Python的一个函数里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before assi ...
随机推荐
- cache的工作原理
http://www.360doc.com/content/11/0307/21/3791508_99049437.shtml TLB(Translation Lookaside Buffer,也称快 ...
- 双有序队列算法——处理哈夫曼K叉树的高效算法
算法介绍: 哈夫曼树的思路及实现众所周知,大部分是用堆来维护和实现,这种思路比较清晰,在K比较小的时候处理较快(具体例子接下来再说),而且编程复杂度不是很高,利于应用.但是,其所用的数据结构是树,是在 ...
- python 代码格式化工具:pep8ify
资料: https://github.com/spulec/pep8ify 安装 $ pip install pep8ify 用法 Usage: 2to3 [options] file|dir ... ...
- jxl对excel删除行
简单记录下: package com.pingan; import java.io.File; import java.util.regex.Matcher; import java.util.reg ...
- ionic之应用首次启动引导页
用户首次启动app先进入引导页,localstroge记录状态,下次启动应用不再显示引导页. HTML: <html> <head> <meta charset=&quo ...
- 如何把textfield或者textview中长按出现的(全选,复制,粘贴)显示成中文
ios在配置文件info.plist 中添加Localiztion native development region (本地化设置) 设置为 china
- MongoDB 聚合
聚合操作过程中的数据记录和计算结果返回.聚合操作分组值从多个文档,并可以执行各种操作,分组数据返回单个结果.在SQL COUNT(*)和group by 相当于MongoDB的聚集. aggregat ...
- 关于 Head First SQL 中文版
我想谈谈 我对于Head First SQL 中文版的一些看法 事实上关于我翻译的这个Head First SQL 中文版..我自觉得:的确翻译得非常烂.. 和翻译Head First ...
- TabBarController创建及使用方法简介
TabBarController创建及使用方法简介 大致讲解一下TabBarController的创建过程: 首先,我们需要一些视图,如创建UIControllerView类型的view1,view2 ...
- HTML5之兴趣爱好