个人写作水平欠佳,目前的随笔仅作练手。。。
所谓“作用域”和“名称空间”大概C里面提到的比较多,在Python里面相对的定义比较模糊,因为最近吃了很多亏,所以记录在这里。
1, 作用域
在多个py文件的python项目中,其实每个文件都是一个名称空间,他们有各自的全局变量(定义在函数外),局部变量(定义在函数内)。需要说明的是,
1,声明的global变量可以直接修改全集变量,否则只能建立一个包含全局变量值的副本,以后做的任何操作和全局变量无关。 另外这里面涉及到局部变量是如何向上找自己的真正的变量声明的,这又是个深坑,按下不表:)
2,如果全局变量是字典,那么可以直接在函数里面修改全局变量的值而不用声明global,这是因为字典在声明的时候已经“实例化”, 后续进行的修改都是对其引用的修改,而不会像变量那样再建立一个函数内的副本。
2,名称空间
我想谈一下有关名称空间是如何import和他们之间的全局变量是如何相互影响的。
假设有2个python文件 a.py b.py在同一目录下
1,在a.py中 import b, 这样在a中操作b下的成员需要冠以b, 这种情况下可以直接在b.xxx中insert变量xxx --> b.xxx = 123 也可以直接对b中的字典直接操作(赋值...)
2, 在a.py 中 from b import * 这样在a中可以直接操作b成员(虽然会导致一些名称空间重叠的问题),但是如果想要改变b中的变量值,仍要冠以b.xxx 才能操作, 也可以直接对b中的字典直接操作
网友评论