if name=='_main_'怎样理解?

skyccm 2009-12-21 05:02:49
if name=='_main_': #‘非导入时启动’功能
main()

指调用外部文件呢?如果不行就,执行内部代码吗?
...全文
2610 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongnanyanhai 2009-12-22
  • 打赏
  • 举报
回复
一般来说python写的文件既可以运行,也可以作为模块来被其他程序调用。

当程序是自身运行时,其__name__的值就是字符串"__main__"了,如果是被其他程序调用,那么它的__name__的值就不是字符串"__main__",使用下面这个判断的作用就是使程序只有在自身被运行的情况下才执行,如果只是被调用,那么就不运行了。

例如,有一个python程序是main.py,代码如下:



def run():
print "你好,世界!"

if __name__=="__main__":
run()



当你双击main.py时,那么这个程序就会运行了——因为它的__name__的值为"__main__"。

当你在其它程序中调用这个main.py文件,例如use.py:


import main.py #此处把前面的main.py作为模块调用

if __name__=="__main__":
main.run() #调用main.py中的run()函数!



这个if __name__=="__main__"判断,可以使这个条件语句块中的命令只在它独立运行时才执行!

(注意:此处main.py,和use.py两个文件必须放在一起!)
notax 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dongnanyanhai 的回复:]

当你在其它程序中调用这个main.py文件,例如use.py:

Python codeimport main.py#此处把前面的main.py作为模块调用if__name__=="__main__":
main.run()#调用main.py中的run()函数!

这个if __name__=="__main__"判断,可以使这个条件语句块中的命令只在它独立运行时才执行!

(注意:此处main.py,和use.py两个文件必须放在一起!)
[/Quote]

顺便查了查python 3.1 的源码,在import main 的时候,把main.的__main__ module给拿掉,
这也解释了import main.py 的话,不会执行if __name__ == __main__ 的 部分

import.c
...
/* First, delete __main__ */
value = PyDict_GetItemString(modules, "__main__");
if (value != NULL && PyModule_Check(value)) {
if (Py_VerboseFlag)
PySys_WriteStderr("# cleanup __main__\n");
_PyModule_Clear(value);
PyDict_SetItemString(modules, "__main__", Py_None);
}
...
gxx2019 2009-12-22
  • 打赏
  • 举报
回复
你运行当前脚本,就会执行if __name__=="__main__"下的函数,如果你是当模块被其他程序import的,那么就不会执行。主要是测试用,测试你写的这个模块有没有实现你想要的功能
dskit 2009-12-22
  • 打赏
  • 举报
回复
if __name__=="__main__":

程序的入口
simouse 2009-12-21
  • 打赏
  • 举报
回复
这样写可以方便测试,这个判断主要是判断主执行文件是不是当前文件。
不得闲 2009-12-21
  • 打赏
  • 举报
回复
就是执行本单元文件内的代码的入口
比如,你写一个代码文件 x.py
当你直接用python运行x.py的时候,会通过这个__main__作为入口!
Aylazhang 2009-12-21
  • 打赏
  • 举报
回复
就是直接执行这个脚本时, name='_mian_' 就成立了。

37,734

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧