造成这种差异的原因与Python名称空间的命名方式有关。如果您在函数定义(
deffoo():)中,并且访问了名称(
VAR1或
LISTL),它将首先在本地命名空间中搜索,找不到任何内容,然后搜索在其中定义函数的模块的命名空间,一直到全局名称空间,直到找到匹配项或失败为止。
但是,“访问名称”和“分配名称”是两个不同的概念。如果您再次位于函数定义中,并说
VAR1 =2,
VAR1则说明函数内部具有新的本地名称的新变量。如果您认为如果没有这样的命名空间在工作,那么您将遇到各种命名冲突,这是有道理的。
当您追加到列表时,您只是访问列表,然后在其上调用一个恰巧改变其概念价值的方法。使用do时
+=,实际上是在为名称分配值。
如果您希望能够为在当前名称空间之外定义的名称分配值,则可以使用
global关键字。在这种情况下,您首先要在函数中说
globalVAR1,然后从那里开始,名称VAR1将是外部命名空间中的名称,并且对其的任何赋值都将在函数外部生效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)