15 Python 作用域
来源:互联网 发布:淘宝店晨练服 编辑:程序博客网 时间:2024/06/11 19:56
Python 搞定Python中的作用域
- Python 搞定Python中的作用域
- 块级作用域
- 局部作用域
- 作用域链
- 终极版1
- 终极版2
- 终终极版
转载请标明出处(http://blog.csdn.net/lis_12/article/details/52915711).
阅读前,请谨记以下两句:
- ,函数在没有执行前,内部代码不执行;
- 在函数未执行前,作用域就已经生成了,作用链也生成了;
块级作用域
for i in range(10): print iprint i #9if 1 == 1: name = 'lz'print name #lzif 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 = 10fun()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 namedef f2(): name = 'lz0' return f1f = f2()f() #结果是啥呢?
f2()返回了函数f1的内存地址,执行f()等同于执行f1(),f1()和f2()并没有任何关系,所以当执行f1()的时候,如果函数内找不到变量则会向外部寻找,所以执行f()的结果为’lz’.
终极版2
name = 'lz'def f1(): print namedef f2(): name = 'lz0' f1()f2() #lz
请记住,在函数未执行前,作用域就已经生成了,作用链也生成了…..
终终极版
l = [lambda : x for x in range(10)] #相当于无入参的函数print type(l) #listprint l[0] #<function <lambda> at 0x00000000034FD7B8>print l[0]() #结果是?
结果是9- -!,不是0,懵逼了……
请记住,函数在没有执行前,内部代码不执行……来个简单点的例子…
#通俗版def f(): global a a = 10print a #error,函数在未执行前,a还不是全局变量....f()print a #10#进化版x = 1f1 = lambda :xx = 2f2 = lambda :xx = 3f3 = lambda :xx = 4f4 = lambda :xprint f1() #4x = 5print f2() #5,这下该理解"函数在没有执行前,内部代码不执行"这句话了吧....,f1()执行时,由于函数体内未定义x,向上寻找,此时x = 4,返回4;f2()执行时,,由于函数体内未定义x,向上寻找,此时x = 5,返回5
0 0
- 15 Python 作用域
- python 变量作用域
- python 变量作用域
- python变量作用域
- python作用域
- python 变量作用域
- python 变量作用域
- python变量作用域
- python 变量作用域
- python变量作用域
- python的作用域
- python作用域概述
- 【Python】变量作用域
- python 变量作用域
- Python作用域陷阱
- python学习:作用域
- python 变量作用域
- Python的作用域
- 第九周项目2-对称矩阵压缩存储的实现与应用(1)
- 在QT运行时,遇到"connect:No such slot "解决方案
- 从对象的引用到对象的复制
- 文章标题
- [codeforces] Juicer
- 15 Python 作用域
- jquery选择器总结
- 改进筛素数法
- [codeforces]Checkpoints
- 几种CNN网络结构及其资源使用
- LeetCode 26. Remove Duplicates from Sorted Array
- hdu1213 How Many Tables
- [LeetCode]--17. Letter Combinations of a Phone Number
- 我喜欢的高级for、for循环