python:UnboundLocalError: local variable 'xxx' referenced before assignment
2016-08-25 14:09
316 查看
近来一直都在学习python语言,偶然在伯乐在线看到2017年京东C/C++的面试题。就打算用python+ST3 IDE顺便敲下面试题代码。
原题 C语言:
原题 python语言:
乍一眼看,我写的python代码没错吧。但是很囧的事情,既然我写的python代码报错了(python初学者,大家误喷)。
提示局部变量'cnt'在没有声明就引用了。后来想到python提供global关键字引用全局变量。就尝试了一番。
没报错,正常运行。后来多方收集资料,针对全局变量和局部变量的使用,总结如下:
1.内部函数,不修改全局变量可以直接访问全局变量。
2.内部函数,修改同名全局变量,则python会认为它是一个局部变量。如要让python认为是全局变量,使用global关键字。
3.在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError。
原题 C语言:
#include <stdio.h> int cnt=0; int fib(int n){ cnt++; if(n==0) return 1; else if(n==1) return 2; else return fib(n-1)+fib(n-2); } void main() { fib(8); 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问题:UnboundLocalError: local variable 'xxx' referenced before assignment
- python 错误--UnboundLocalError: local variable '**' referenced before assignment
- Python - UnboundLocalError: local variable referenced before assignment
- 【Python】UnboundLocalError: local variable 'l' referenced before assignment
- python的UnboundLocalError: local variable 'xxx' referenced before assignment
- Python的UnboundLocalError: local variable 'xxx' referenced before assignment
- Python:UnboundLocalError: local variable 'num' referenced before assignment
- 【Python】UnboundLocalError: local variable 'x' referenced before assignment
- Python的UnboundLocalError: local variable 'xxx' referenced before assignment
- python文件运行报错:UnboundLocalError: local variable 'status' referenced before assignment
- Python 读写当前路径下文件错误 UnboundLocalError: local variable 'file' referenced before assignment
- python:UnboundLocalError: local variable 'l' referenced before assignment
- Python全局变量global和局部变量 UnboundLocalError: local variable 'x' referenced before assignment
- python "UnboundLocalError: local variable 'log_f' referenced before assignment" 错误
- 【Python】UnboundLocalError: local variable 'l' referenced before assignment
- 【Python基础】之全局变量(UnboundLocalError: local variable referenced before assignment)
- python的UnboundLocalError: local variable 'xxx' referenced before assignment
- 【Python基础】Python3: UnboundLocalError: local variable 'num' referenced before assignment
- 【python】UnboundLocalError: local variable 'counter' referenced before assignment