这一章节我们来说说变量名解析的原则:LEGB原则
1.当函数使用未认证的变量名时,python搜索4个作用域,本地作用域(L)->上一层结构中def或者lambda的本地作用域(E)->全局作用域(G)>内置作用域(B),并且在第一次找到这个变量名的地方停下来
2.函数给一个变量赋值的时候,总是创建或者改变本地作用域的变量名,除法他是声明为全局
>>> def test():
x=1
print(x)
print(id(x))
x=2
print(x)
print(id(x))
>>> test()
1
505991632
2
505991648
>>>
在test,我们第一次赋值给x的时候创建了变量,然后后面又改变了变量x,如果x是全局变量时,就会如下:
x='e f t efdad'
def test():
print(x)
print(id(x))
#x=123
#print(x)
#print(id(x))
if __name__=='__main__':
test()
但是,我们需要注意一点,看见上面代码里面的注释没有,如果注释放开了,他就会报错了,为什么?
x='e f t efdad'
def test():
print(x)
print(id(x))
x=123
print(x)
print(id(x))
if __name__=='__main__':
test()
输出:
>>> ================================ RESTART ================================
>>>
Traceback (most recent call last):
File "C:\Python34\test.py", line 9, in <module>
test()
File "C:\Python34\test.py", line 3, in test
print(x)
UnboundLocalError: local variable 'x' referenced before assignment
>>>
没有找到本地变量x,我认为是这样的,虽然py是解释性的语言,但是他还是需要编译成pyc文件来执行,只不过这个过程我们看不见,在编译的过程中x其实已经被认定为本地变量,而不再是模块里面的全局变量,所以才会出现这种情况,那么怎么解决?我们只需要在改动x前面加上global x即可,global关键字我们下面的章节会详细讲述
x='e f t efdad'
def test():
print(x)
print(id(x))
global x
x=123
print(x)
print(id(x))
if __name__=='__main__':
test()
输出:
>>> ================================ RESTART ================================
>>>
e f t efdad
31843176
123
505993584
>>>
上面的代码保存为test.py然后运行即可
3.在函数之外给一个变量赋值(在模块顶层或者idle),本地作用域和模块的命名空间是相同的
总结:这一章节主要简单说明了变量名解析的LEGB原则
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
python 零基础学习篇-Python-第八章:文件的使用1.mp3
python 零基础学习篇-Python-第八章:文件的使用2-12.mp3
python 零基础学习篇-Python-第七章:函数的设计和使用1-3.mp3
python 零基础学习篇-Python-第七章:函数的设计和使用4-9.mp3
Python3编写实用脚本程序——从零学Python-掘金活动.zip Python3编写实用脚本程序——从零学Python-掘金活动.zip Python3编写实用脚本程序——从零学Python-掘金活动.zip Python3编写实用脚本程序——从零学Python-...
零基础学python 1.7 第二个程序
【Python3】零基础入门学习Python--Python3.docx
零基础入门学习Python-价值200的鱼C论坛教程
python 零基础学习篇-05.JDK安装和基础环境配置--环境变量--域名映射.mp4
015字符串:格式化.mp4 77.4M2019-07-26 16:23 014字符串:各种奇葩的...003小插曲之变量和字符串.mp4 56.3M2019-07-26 16:23 002用Python设计第一个游戏.mp4 49.5M2019-07-26 16:23 001我和Python的第一次亲密接触.mp4
python入门 零基础学Python
计算机专业基础理论电子书合集07----编程语言:python (2) python高级编程,网络开发,web开发,设计模式,自动化运维
计算机专业基础理论电子书合集07----编程语言:python (1) python核心编程,python codebook
本文是类方法给大家介绍如何将python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果,需要的朋友可以参考下
2010-09-07 12:43 220,160 boost_python-vc90-mt-1_44.dll 2010-09-07 12:43 189,272 boost_python-vc90-mt-1_44.lib 2010-09-07 12:43 514,048 boost_python-vc90-mt-gyd-1_44.dll 2010-09-07 12:43 190,964 boost_...
零基础入门学习Python
从零开始学Python:Python语言中的变量.docx从零开始学Python:Python语言中的变量.docx从零开始学Python:Python语言中的变量.docx从零开始学Python:Python语言中的变量.docx从零开始学Python:Python语言中的变量...
零基础入门学python,全套源码分享,总共4.22G,刚入门的同学可以看看
python免费课件-零基础python⼊门(含课件代码)PDF⾼清 版 给⼤家带来的⼀篇关于python相关的电⼦⽂档资源,介绍了关于python⼊门、python基础⽅⾯的内容,本书是由python官⽅出版,格式 为PDF,资源⼤⼩61 MB,⽥...
项目概述:《Python3.6入门教程:草根学Python完整源码解析》...项目简介:这是一套基于Python3.6的入门级教程资源,名为“草根学Python”,它包含了丰富的源码解析和实例文件,旨在帮助初学者扎实掌握Python编程语言。