15 Python 作用域
2016-10-24 21:07
405 查看
Python 搞定Python中的作用域
Python 搞定Python中的作用域块级作用域
局部作用域
作用域链
终极版1
终极版2
终终极版
转载请标明出处(http://blog.csdn.net/lis_12/article/details/52915711).
阅读前,请谨记以下两句:
,函数在没有执行前,内部代码不执行;
在函数未执行前,作用域就已经生成了,作用链也生成了;
块级作用域
for i in range(10): print i print i #9 if 1 == 1: name = 'lz' print name #lz if 2 > 2: name1 = 'lz0' #代码块里的变量 print name1 #error,NameError: name 'name1' is not defined
Python不像C语言一样,如
for(int i = 0;i < 10;i++) { dosomething(); } print("%d\n",i);#error,i只能在for中使用
Python中是没有块级作用域的,外部也是可以调用的,但是如果代码块里面的变量没有执行的话,外部就不能使用代码块里的变量.见上述Python代码.
局部作用域
def fun(): a = 10 fun() print a #error,a仅在fun()函数内有效,在外部是无法调用的,(将变量声明为全局变量除外)
作用域链
#作用域链 name = 'lz' def fun(): name = 'lz0' def fun2(): name = 'lz1' print name fun2() fun() #'lz1'
Python中有作用域链,变量会由内到外的找,先去在本身的作用域找,如果未找到,则取上级作用域找,直至找到为止,如果到了最顶层扔未找到则抛出异常.
终极版1
name = 'lz' def f1(): print name def f2(): name = 'lz0' return f1 f = f2() f() #结果是啥呢?
f2()返回了函数f1的内存地址,执行f()等同于执行f1(),f1()和f2()并没有任何关系,所以当执行f1()的时候,如果函数内找不到变量则会向外部寻找,所以执行f()的结果为’lz’.
终极版2
name = 'lz' def f1(): print name def f2(): name = 'lz0' f1() f2() #lz
请记住,在函数未执行前,作用域就已经生成了,作用链也生成了…..
终终极版
l = [lambda : x for x in range(10)] #相当于无入参的函数 print type(l) #list print l[0] #<function <lambda> at 0x00000000034FD7B8> print l[0]() #结果是?
结果是9- -!,不是0,懵逼了……
请记住,函数在没有执行前,内部代码不执行……来个简单点的例子…
#通俗版 def f(): global a a = 10 print a #error,函数在未执行前,a还不是全局变量.... f() print a #10 #进化版 x = 1 f1 = lambda :x x = 2 f2 = lambda :x x = 3 f3 = lambda :x x = 4 f4 = lambda :x print f1() #4 x = 5 print f2() #5,这下该理解"函数在没有执行前,内部代码不执行"这句话了吧....,f1()执行时,由于函数体内未定义x,向上寻找,此时x = 4,返回4;f2()执行时,,由于函数体内未定义x,向上寻找,此时x = 5,返回5
相关文章推荐
- Python轻松入门-15 变量的作用范围
- Python15 作用域、局部与全局变量
- python 简单图像处理(15) 图像的傅立叶变换
- Python源码剖析[15] —— 最简单的Python实现:Small Python
- 新闻视频 15讲 编写(新闻表)剩下的存储过程 关于TODO 注释的作用
- 简明python教程 --C++程序员的视角(二):函数及作用域
- fedora 15 升级python后yum无法使用的解决方法
- 理解Javascript_15_作用域分配与变量访问规则,再送个闭包
- Python -- while的作用(未完待续)
- 11-09-15 python 列表推导List Comprehension&
- Python 作用域和命名空间
- 支持msnp15协议python可发送离线消息脚本
- Python入门的36个例子——15 默认参数
- 理解Javascript_15_作用域分配与变量访问规则,再送个闭包
- 职业的秘密(15)文化的作用
- 菜鸟学Python(15):打出Django中的sql查询语句
- 支持msnp15协议python可发送离线消息脚本附录2
- Python模块包中__init__.py文件的作用(转载)
- python 新手问题 r 的作用