Ado*_*obe 10 python scope module
我已经在Python中编写了很长一段时间的脚本,并且在我需要的时候学习了更多的Python.在阅读其他人的代码时,我if name == "__main__":经常会遇到.
到底有什么好处呢?
Bry*_*ley 23
这允许您将同一文件用作库(通过导入它)或作为应用程序的起始点.
例如,请考虑以下文件:
# hello.py
def hello(to=__name__):
return "hello, %s" % to
if __name__ == "__main__":
print hello("world")
Run Code Online (Sandbox Code Playgroud)
您可以通过两种方式使用该代码.首先,您可以编写一个导入它的程序.如果导入库,__name__则将是库的名称,因此检查将失败,并且代码将不会执行(这是所需的行为):
#program.py
from hello import hello # this won't cause anything to print
print hello("world")
Run Code Online (Sandbox Code Playgroud)
如果您不想编写第二个文件,可以直接从命令行运行代码,例如:
$ python hello.py
hello, __main__
Run Code Online (Sandbox Code Playgroud)
这种行为都取决于__name__python根据是否导入库或由解释器直接运行而设置的特殊变量.如果直接运行,它将被设置为__main__.如果导入它将被设置为库名称(在本例中hello).
通常,此构造用于向代码添加单元测试.这样,当您编写库时,您可以将测试代码直接嵌入到文件中,而不必担心在以正常方式使用库时它将被执行.当您想要测试库时,您不需要任何框架,因为您可以像运行程序一样运行库.
另见__main__python文档(尽管它非常稀疏)
| 归档时间: |
|
| 查看次数: |
30977 次 |
| 最近记录: |