视频最后讲解了“LEGB规则”,即Python变量的解析顺序为:Local(局部作用域)→Enclosed(嵌套函数的外层作用域)→Global(全局作用域)→Build-In(内置作用域)。掌握了这一规则,我们就知道Python如何解决不同作用域间的变量出现冲突的问题啦! >>> def myfunc():
x=520
print(x)
>>> myfunc()
520
>>> print(x)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print(x)
NameError: name 'x' is not defined
>>> x=880
>>> def myfunc()
SyntaxError: invalid syntax
>>> def myfunc():
print(x)
>>> myfunc()
880
>>> def myfunc():
x=520
print(x)
>>> myfunc()
520
>>> print(x)
880
>>> x=880
>>> id(x)
2567052254064
>>> def myfunc():
x=520
print(id(x))
>>> myfunc()
2567052938160
>>> id(x)
2567052254064
>>> x=880
>>> def myfunc():
global x
x=520
print(x)
>>> myfunc()
520
>>> print(x)
520
>>> def funA():
x=520
def funB():
x=880
print("In funB,x=",x)
>>> def funA():
x=520
def funB():
x=880
print("In funB,x=",x)
print("In funA,x=",x)
>>> funB()
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
funB()
NameError: name 'funB' is not defined
>>> #内部函数无法直接调用
>>> def funA():
x=520
def funB():
x=880
print("In funB,x=",x)
funB()
print("In funA,x=",x)
>>> funA()
In funB,x= 880
In funA,x= 520
>>> #内部函数可以访问外部函数的变量,但不是改变其赋值
>>> def funA():
x=520
def funB():
nonlocal x
x=880
print("In funB,x=",x)
funB()
print("In funA,x=",x)
>>> funA()
In funB,x= 880
In funA,x= 880
>>> #LEGB L 是local 局部作用域(含嵌套函数的内层作用域),E Enclosed嵌套函数的外层的作用域 对于最后的一部分,可以使用del函数删除变量,使其恢复原状
>>> str = "小甲鱼把str给毁了"
>>> str(520)
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
str(520)
TypeError: 'str' object is not callable
>>> str
'小甲鱼把str给毁了'
>>>
>>> del str
>>> str(520)
'520' 越来越难啊
LEG+B很棒
滴滴滴~打卡{:10_298:} 视频最后讲解了“LEGB规则”,即Python变量的解析顺序为:Local(局部作用域)→Enclosed(嵌套函数的外层作用域)→Global(全局作用域)→Build-In(内置作用域)。掌握了这一规则,我们就知道Python如何解决不同作用域间的变量出现冲突的问题啦!
重点 Learning...{:10_269:} 本帖最后由 jgz1818 于 2022-11-25 22:03 编辑
file:///C:/Users/Administrator/Desktop/def%E5%86%85%E5%B5%8C%E5%A5%97.png
怎么是上传图片?这样么?
教材上的应该是错的吧?
教材上的6.6.4章 L 是 Local,是局部作用域
E 是 Enclosed,是嵌套函数的外层函数作用域
G 是 Global,是全局作用域
B 是 Build-In,也就是内置作用域 打卡
打卡 leg+G 很好记 覆盖只是在函数中覆盖,出了函数,全局变量还是全局变量
课后习题第6题还是好难理解,为什么全局变量不存在就不会报错 学习学习-20250603,深刻理解需要慢慢掌握
页:
[1]