Python作用域 全局|局部|global
在使用变量的时候,有时候会发生变量引用错误,或者程序运行完,程序得到的结果与预期存在差别。
记住一条原则:任何变量在使用前,都必须确保“变量引用是否明确”!
- 全局变量:作用域是整个脚本,除非被删除掉,否则他们存活到脚本结束,且对于所有函数,他们的值是可以被访问的。
- 局部变量:作用域局限在定义的函数,依赖于函数现阶段是否处于活动。当函数被调用时,局部变量进入声明它们的作用域。一旦函数完成,变量将会离开其作用域。
我们来看一些例子:
(1)局部变量
函数内部的变量名如果第一次出现,且出现在“=”左边,即被视为定义一个局部变量。不管全局域中有没有用到该变量名,函数中使用的将是局部变量。
ps:此处会报错。因为num
首先被当成了一个局部变量,到等号右侧后发现这个变量还没赋值就被用于计算,于是报错。Num += 100
:这句话是有歧义的,num
既可以表示引用全局变量,也可以是创建一个新的局部变量。
在Python
中,默认创建局部变量并使用它,除非显式声明global
。
(2)函数内部使用全局变量
此时num2
引用的是全局变量中的num2
。此处是明确的,因为把num2
当做一个局部变量的话,会报错,只能是全局的num2
,故不需要声明global
。
(3)函数内部修改全局变量
在函数中,如果想使用并修改到全局变量,则需要使用到global
(4)错误使用global
- 在
if __name__ == ‘__main__’
:中使用global
。
最好的直接解决这个问题的方法是把global声明从 if __name__==’__main__’:
中删除,在这里是不需要声明global
的。
因为与其他语言不同,Python
中的if
语句不会再引入一个新的作用域(scope),任何变量分配的都是全局变量(global)。作为一个全局变量,在使用变量名之前是不允许再一次声明为全局变量。
即if __name__==’__main__’:
中的变量都是全局的,所以在main
中间再一次声明global
是错误的,所以系统会发出警告。
❤ thanks for watching, keep on updating...
点个赞再走吧