python的变量作用域问题
2014-12-26 21:01
253 查看
偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下:
结果由于id在
中受到了影响发生了变化,导致虫虫的产生。
索性探索了下变量作用域,结论如下:
1. 函数中的同名变量不会影响函数外的同名变量(若未加任何修饰--比如global)
2. 变量的最小作用域是一个函数。在函数内部,变量的作用是从始至终的。(这不同于其他语言)
同样下面的也是ok的:
输出1,不会因为b在if/for/while下面而成为一个局部的临时代码块变量!
变量的最小作用范围是函数,甚至极端点,下面的也是输出1的:
id=1 #许多行代码 [id for id in range(10)] #许多行代码 if id!=1: #做一些事情 pass else: #做另外一些事情
结果由于id在
[id for id in range(10)]
中受到了影响发生了变化,导致虫虫的产生。
索性探索了下变量作用域,结论如下:
1. 函数中的同名变量不会影响函数外的同名变量(若未加任何修饰--比如global)
id=1 def test(): id=2 print id #===1
2. 变量的最小作用域是一个函数。在函数内部,变量的作用是从始至终的。(这不同于其他语言)
id = 1 if True: id=2 print id #===2 id = 1 for i in range(10): id=i print i #====9
同样下面的也是ok的:
if True: b=1 print b
输出1,不会因为b在if/for/while下面而成为一个局部的临时代码块变量!
变量的最小作用范围是函数,甚至极端点,下面的也是输出1的:
for i in range(10): for j in range(2): if True: if True: if True: c=1 print c
相关文章推荐
- 解析Python中的变量、引用、拷贝和作用域的问题
- [Python]变量作用域问题UnboundLocalError
- [python]变量作用域问题
- 删除驱动符号链接出错-变量作用域和RtlInitUnicodeString的问题
- C语言变量作用域、生存期及static问题
- [JAVA]变量作用域的问题
- php变量作用域的一些问题
- JavaScript的变量作用域问题
- javascript 基础笔记 变量、作用域、内存问题
- python变量所属问题
- 关于python的变量作用域
- 变量作用域的问题
- Javascript中的变量作用域问题
- python变量作用域
- JavaScript学习笔记 -- 变量作用域问题
- Python闭包 变量问题
- SQL中declare变量的作用域(续)-----一些问题
- MFC 问题集(7)注意变量的作用域
- python 变量作用域
- Javascript 中的变量作用域问题