python全球关键字的用法详解

  

最近刚好有朋友遇到个全球相关的问题,这里简单学习一下全球关键字的用法。

  

想要更好的了解全球关键字,首先要熟悉python的全局变量与局部变量的概念.global关键字的作用是可以申明一个局部变量为全局变量、下面看一下实例

  

<强>一、变量作用域的说明

  

这里简单提一下变量作用域的概念,有兴趣的小伙伴,可以查一下相关的博客

  

1,局部变量

        def ():   # #菊部变量-,-   当地=1   打印(本地)   # #全局无法使用,只有自己可用   打印(全球)      

2,全局变量

        global_str=' 123 '   def ():   # #全菊变量-,-   打印(global_str)   # #全菊变量大家都可以用   打印(global_str)      

3,内置作用域

  

系统内固定模块里定义的变量,如预定义在装入的模块内的变量。这里不介绍了。

  

4,嵌套作用域

  

用的也比较少,主要是用在闭包中,看栗子

        def ():   # #函数内变量,但对于下级函数就是全局变量,对于外部来说就是局部变量   en=1   def内部():   打印(en)   返回途中   返回在()   ()      

<强>二、全球关键字作用

  

1,在函数间全球关键字的作用

        def ():   # #全球关键字作用   全球在   en=1   # #调用其他可以打印,去掉全球会报的错。   其他()   打印(out.__globals__)   def其他():   打印(en)   ()      

2,在类中也是一样,不多说,怕越多越乱,类中可以用自我。

  

3,其他文件导入,如果定义好了之后从其他文件导入了呢?会发生什么,看一下栗子,一个文件仍为上面栗子中代码

        从报告。进口*   ()   print (out.__globals__['恩'])      

结果:         1   1      

还好还好,没有报的错。

  

4,那么问题来了,如果要在另一个文件中继续定义函数,是不是也可以继续使用一个文件中的全球申明的全局变量呢?

        从报告。一个进口   def b ():   print (out.__globals__['恩'])   # #直接飙红了。-,-   打印(en)   b ()      

果然报错了:

        回溯(最近的电话):   文件“/用户/dangfuli/文件/PycharmProjects/asp/报告/b。第9行,py”& lt; module>   b ()   文件“/用户/dangfuli/文件/PycharmProjects/asp/报告/b。py”, 6号线,在b   print (out.__globals__['恩'])   KeyError:“en”      

也就是说,导入包的话,全球定义的全局变量没有被加到全局里面。

  

5,上面好多地方都用到了,func.__globals__,这个运行一下,看个实例

        def ():   # #全球关键字作用   全球在   en=1   其他()   打印(out.__globals__)   # #调用其他可以打印      def其他():   打印(en)      ()      # #返回结果   {“__name__”:“__main__ ',“__doc__”:没有,“__package__”:没有,“__loader__”: & lt; _frozen_importlib_external。在0 x10306a7b8> SourceFileLoader对象,“__spec__”:没有,“__annotations__”: {},“__builtins__”: & lt;模块“内置”(内置)祝辞,“__file__”:“/用户/xxx/文件/PycharmProjects/xxx/报告/y”、“__cached__”:没有,“出”:& lt;函数在0 x101fcee18>,“其他”:& lt;函数在0 x1033f8c80>“en”: 1}      

可以看的到,当前的函数用全球之后,在变量就被加到了全局里面

  

下面看看导入到其他地方去的

        # a.py   def ():   # #全球关键字作用   全球在   en=1   其他()   print (out.__globals__['恩'])   # #调用其他可以打印      def其他():   打印(en)   # # # # # # # # # # # # #上面是一个文件,下面是b文件# # # # # # # # # # # # #      # b.py   从报告。一个进口      def b ():   # #全局里面没有在那个全局变量   ()   print (b.__globals__['恩'])      b ()      

看一下结果:

        1   回溯(最近的电话):   文件“/用户/xxx/文件/PycharmProjects/xxx/报告/b。py”, 8号线,在& lt; module>   b ()   文件“/用户/xxx/文件/PycharmProjects/xxx/报告/b。py”, 6号线,在b   print (b.__globals__['恩'])   KeyError:“en”

python全球关键字的用法详解