Python作用域 全局|局部|global

liuxiaohua 2019-06-28


在使用变量的时候,有时候会发生变量引用错误,或者程序运行完,程序得到的结果与预期存在差别。

记住一条原则:任何变量在使用前,都必须确保“变量引用是否明确”!

  • 全局变量:作用域是整个脚本,除非被删除掉,否则他们存活到脚本结束,且对于所有函数,他们的值是可以被访问的。
  • 局部变量:作用域局限在定义的函数,依赖于函数现阶段是否处于活动。当函数被调用时,局部变量进入声明它们的作用域。一旦函数完成,变量将会离开其作用域。

我们来看一些例子:
(1)局部变量
函数内部的变量名如果第一次出现,且出现在“=”左边,即被视为定义一个局部变量。不管全局域中有没有用到该变量名,函数中使用的将是局部变量。

Python作用域 全局|局部|global

ps:此处会报错。因为num首先被当成了一个局部变量,到等号右侧后发现这个变量还没赋值就被用于计算,于是报错。
Num += 100:这句话是有歧义的,num既可以表示引用全局变量,也可以是创建一个新的局部变量。
Python中,默认创建局部变量并使用它,除非显式声明global

(2)函数内部使用全局变量

Python作用域 全局|局部|global

此时num2引用的是全局变量中的num2。此处是明确的,因为把num2当做一个局部变量的话,会报错,只能是全局的num2,故不需要声明global

(3)函数内部修改全局变量
在函数中,如果想使用并修改到全局变量,则需要使用到global

Python作用域 全局|局部|global

(4)错误使用global

  • if __name__ == ‘__main__’:中使用global

Python作用域 全局|局部|global

最好的直接解决这个问题的方法是把global声明从 if __name__==’__main__’: 中删除,在这里是不需要声明global的。
因为与其他语言不同,Python中的if语句不会再引入一个新的作用域(scope),任何变量分配的都是全局变量(global)。作为一个全局变量,在使用变量名之前是不允许再一次声明为全局变量。
if __name__==’__main__’: 中的变量都是全局的,所以在main中间再一次声明global是错误的,所以系统会发出警告。


❤ thanks for watching, keep on updating...
点个赞再走吧

相关推荐