Why use def main()?
Possible Duplicate:
What doesif __name__=="__main__" do?
我看过一些代码示例和教程
1 2 3 4 5 | def main(): # my code here if __name__ =="__main__": main() |
但是为什么呢?有没有什么理由不在文件的顶部定义函数,然后在下面写代码?工业工程
1 2 3 4 5 6 7 8 9 | def my_function() # my code here def my_function_two() # my code here # some code # call function # print(something) |
我只是想知道主旋律有没有押韵?
如果没有主sentinel,即使脚本作为模块导入,也会执行代码。
其他人都已经回答过了,但我想我还有别的事要补充。
调用
其他语言(如C语言和Java语言)有一个EDOCX1×7函数,它在执行程序时被调用。使用这个
if ,我们可以使python的行为像它们一样,这让许多人觉得更熟悉。代码将更干净、更容易阅读和更具组织性。(是的,我知道这是主观的)
对于
import 来说,将python代码作为一个模块是可能的,不会产生不良的副作用。这意味着可以对该代码运行测试。
这意味着我们可以将该代码导入到交互式Python shell中,并测试/调试/运行它。
def main 中的变量是局部变量,而它之外的变量是全局变量。这可能会引入一些错误和意外行为。
但是,不需要编写
我自己通常开始写一些没有任何功能的废弃脚本。如果脚本变得足够大,或者如果我觉得将所有代码放在函数中对我有利,那么我重构代码并执行它。当我编写
即使您将代码放在主函数中,也不需要完全按此方式编写代码。一个简单的变化可能是:
1 2 3 4 5 6 7 8 | import sys def main(argv): # My code here pass if __name__ =="__main__": main(sys.argv) |
这意味着您可以从传递自定义参数的其他脚本(或交互shell)调用
在我编写的面向对象应用程序中,代码如下所示:
1 2 3 4 5 6 | class MyApplication(something): # My code here if __name__ =="__main__": app = MyApplication() app.run() |
因此,请随意编写更适合您的代码。:)
如果foo.py的内容
1 2 3 | print __name__ if __name__ == '__main__': print 'XXXX' |
文件foo.py可以通过两种方式使用。
- imported in another file :
import foo
在这种情况下,
- executed directly :
python foo.py
直接执行时,
使用此功能在同一模块中编写各种单元测试的一种。
"
如果您使用
考虑第二个脚本。如果您将其导入到另一个目录中,那么将执行"全局级"的指令。