python的变量作用域问题
偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下:
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基础-变量作用域
1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...
- python的变量作用域
import time global mark,sum def gaosi(Q): global sum,mark # 在 使用的时候防止隔离 也要声明一下 这个是全局变量 , 引用外面的值 sum+ ...
- Python之变量作用域
使用 global强制声明为全局变量
- Python中的变量作用域
python中变量作用域包括: L (Local) 局部作用域,函数内部声明但没有使用global的变量E (Enclosing) 闭包函数外的函数中,def或者lambda的本地作用域G (Glob ...
- python 变量作用域、闭包
先看一个问题: 下面代码输出的结果是0,换句话说,这个fucn2虽然已经用global声明了variable1,但还是没有改变变量的值 def func1(): variable1=0 def fun ...
- python 本地变量和全局变量 locals() globals() global nonlocal 闭包 以及和 scala 闭包的区别
最近看 scala ,看到了它的作用域,特此回顾一下python的变量作用域问题. A = 10 B = 100 print A #10 print globals() #{'A': 10, 'B': ...
- Python变量作用域(一)
在一个程序中使用变量名时,Python创建.改变或者查找变量名都是在所谓的命名空间中进行的.作用域指的就是命名空间. Python中的变量名在第一次赋值时已经创建,并且必须经过赋值后才能够使用.由于变 ...
- Python中变量的作用域(variable scope)
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
- Python 再谈变量作用域与变量引用
再谈变量作用域与变量引用 by:授客 QQ:1033553122 module3.py #!/usr/bin/env python # -*- coding:utf-8 -*- __author_ ...
随机推荐
- Python + OpenCV2 系列:1 - 配置
Python+OpenCV2+Eclipse+Windos 8.1(32bits): 最初的目的是做图像处理,opencv强大的社区支持,让我想从matlab转到opencv框架下进行试验,而Pyth ...
- ecshop 获取某个商品的 所有订单信息 或者销量
把一下代码放到 lib_main.php 1.统计某个下单商品的人数 function get_goods_ordernum($goods_id){ $sql = "select count ...
- osharp3使用经验:整合DbContextScope 文章 1
osharp3的事务处理是跳过savechangeing方法来控制的,没有DbContextScope专业 DbContextScope管理dbcontext的优劣本文不讨论 整合过程: 1.在.Da ...
- MVC下的客户端模板技术
1.引言 在Web编程中,我们有时经常需要使用Ajax来访问服务端的接口,然后使用这些返回的数据(一般格式都是JSON)来展示客户端的相关信息.例如:在一个商品列表,我们点击某一样的商品,查看该商品的 ...
- idea配置2个tomcat
复制tomcat 分别放在不同地方
- oracle 的wm_concat函数使用
转载自:http://blog.itpub.net/post/42245/522757 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来 ...
- SQL Server2008 表旋转(pivot)技术
参考资料: http://www.cnblogs.com/xiashengwang/p/3503554.html
- NIOS ii 流水灯
为了做项目的前期验证工作,实验室购买了某开发板,下面是基于该板子的实现过程.作为笔记记录,供入门者参考. 1:创建一个Quartus II的工程 next选择器件,然后finish.我的器件是cycl ...
- 前端入门级之如何从零开始前端(估计要被人鄙视成LOW货了)入门篇
<!------------------------------------------------------基本说明开始----------------------------------- ...
- javascript简单的认识下return语句+2015的总结+2016的展望
好久没更新博客了...自从有了mac之后世界变得简单了...日常么,除了研究代码,看别人的代码,写自己的代码.就那样.... 吐槽点:window配个nodejs的环境花了九头牛两只老虎的力气,mac ...