最近因为手头工作需要,重新拾起十年前玩的Python写了一个小程序,但因为之前接触Java的时间太长,用写Java的思维写Python,就遇到了这样或那样的问题,现在程序写完,小记其中一个印象深刻的问题。虽然这其实是Python中最最基础的一个常识…
Python变量
不同组的相同名称的变量视为两个独立的变量,因此隶属于不同分组(即命名空间)的变量名可以重复。所以python的局部变量名称可以和全局变量名称重复。
变量名解析LEGB原则
L是local,指局部变量,作用于函数内部。
E是Enclosing function locals,作用于Python嵌套函数内。
G是Global,是全局变量,定义在函数体外,在整个文件中都可以访问。
B是Buildin,Python内置模块的名字空间函数名称等,比如dict、len()等。
LEGB就是用来规定命名空间查找顺序的规则。
LEGB规定了查找的顺序为:
Local>Enclosing function locals>Global>Builtin
这个需要特别注意!
global访问修改全局变量
如果要在函数内修改全局变量,则必须在函数内部,修改全局变量前,显式的使用global声明该变量,才可以修改。 但需要注意的是,对于全局数组、字典类变量则不需要global声明,直接就可以在函数内部修改。
关于全局变量的总结和建议
总结:不建议在函数内直接修改全局变量,容易造成混乱。正常情况下应在函数内访问全局变量,而不是修改 。
建议:如果你想要通过一个函数来修改一个全局变量,建议把它作为一个变量传入,然后重新指定返回值。
发表回复