_ _name_ _ 变量介绍及其在 Python 中的使用
当你浏览 Python 代码时,你很可能已经看到了 __name__
变量。下面的示例代码展示了它的用法:
if __name__ == '__main__': main()
在本文中,我想向你展示如何使用此变量在 Python 中创建模块。
为什么要使用 _ _name_ _ 变量
__name__
变量(前后各两个下划线)是一个特殊的 Python 变量。它的值取决于我们如何执行脚本。
有时,你编写的脚本带有在其他脚本中也可能有用的函数。在 Python 中,你可以将该脚本作为另一个脚本中的模块导入。
由于这个特殊变量,你可以决定是否要运行脚本,或者你想导入脚本中定义的函数。
__name__ 变量可以包含什么值
当你运行脚本时,__name__
变量等于 __main__
。当你导入包含脚本时,它将包含脚本的名称。
让我们来看看这两个用例,并用两个插图描述这个过程。
场景一——运行脚本
假设我们像这样写脚本 nameScript.py
:
def myFunction(): print 'The value of __name__ is ' + __name__
def main(): myFunction()
if __name__ == '__main__': main()
如果你运行 nameScript.py,将是下面的过程。
在运行所有其他代码之前,__name__
变量被设置为 __main__
。之后,运行 main
和 myFunction
def 语句。因为条件评估为真,所以调用了 main
函数。这反过来又调用 myFunction
。这将打印出 __main__
的值。
场景二——在另一个脚本中引入脚本
如果我们想在另一个脚本中重新使用 myFunction
,例如 importingScript.py
,我们可以将 nameScript.py
作为模块导入。
importingScript.py
中的代码可能如下:
import nameScript as ns
ns.myFunction()
然后我们有两个作用域:一个是 importingScript
,另一个是 nameScript
。在插图中,你将看到它与第一个用例的不同之处。
在 importingScript.py 中,__name__
变量被设置为 __main__
。通过导入 nameScript,Python 通过将 .py
添加到模块名称来开始查找文件。然后运行包含在导入文件中的代码。
但是这次它被设置为 nameScript。再次运行 main 和 myFunction 的 def 语句。但是,现在条件评估为 false,并且不调用 main。
在 importingScript.py 中,我们调用 myFunction 来输出 nameScript。当定义该函数时,NameScript 为 myFunction。
如果你要在 importingScript 中打印 __name__
,这将输出 __main__
。这样做的原因是 Python 使用了 importingScript 范围内的已知值。
小结
在这篇简短的文章中,我解释了如何使用 __name__
变量来编写模块。你也可以单独运行这些模块。这可以通过利用这些变量的值如何根据位置而变化来实现。