求Python中全局变量的详细理解?
题主你好,
拿实际例子和你说一下吧, 更好理解一些.
我们在拿到一个python脚本的时候,往往发现里面都有如下语句:
注意: __name__和'__main__'虽说看着像一类东西, 但要注意的是__name__是一个变量, 而'__main__'就是一个字符串常量.
-----
假设我有一个文件叫hi.py,内容如下:
A.当我们直接执行hi.py这个文件时, __name__的值就是字符串'__main__'.
B.假设我们还有一个文件hello.py,它把hi.py作为模块导入(因为hello.py想直接用hi.py中定义的hello()函数).
需要注意,上图是将hi.py作为模块导入到了hello.py中(作为模块导入不需要写py后缀,也不能写),重点看下面的两个print()语句, 一个打印的是hi.__name__,一个打印的是__name__, 注意当hi.py被作为模块导入后,hi.__name__得到的是模块名,即hi. 而在被执行的文件中直接输出__name__变量,其值永远是字符串'__main__'. 见执行结果:
-----
看到这里你可能还是云里雾里,下面对照着你的截图拿上面的例子分析一下:
"每个模块中都有一个全局变量__name__", 这句没啥说的,就引入了一个叫__name__的变量.
"__name__的作用是获取当前模块的名称."(这句话其实说的不严谨,但目前先不去细究)这句也不是重点, 下面才说的是__name__的值到底是什么.
"如果当前模块是单独执行的,则其__name__的值就是__main__",干货来了, 拿上面的hi.py来讲,我们直接把hi.py作为可执行文件进行执行,则在它里面print(__name__)就是字符串'__main__'.
"如果是作为模块导入,则其__name__的值就是模块的名字",这也是干货,拿上面hello.py来说,因为hi是作为模块被导入的,所以print(hi.__name__)输出的就是模块名hi.这句指的就是这个意思.另外你看hello.py中也有一个print(__name__)输出的是字符串'__main__',因为我上面说了,只要在你执行的文件里直接单独输出__name__变量,它的值一定是'__main__'.
-----
扩展阅读:
=====
希望可以帮到题主, 欢迎追问.