最近刚好有朋友遇到个全球相关的问题,这里简单学习一下全球关键字的用法。
想要更好的了解全球关键字,首先要熟悉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全球关键字的用法详解