Possible Duplicate:
What doesif __name__== "__main__"
do?
我看过一些使用
def main():
# my code here
if __name__ == "__main__":
main()
但为什么呢?有什么理由不在文件顶部定义函数,然后在文件下面编写代码吗?工业工程
def my_function()
# my code here
def my_function_two()
# my code here
# some code
# call function
# print(something)
我只是想知道主旋律有没有押韵?
如果foo.py的内容
foo.py文件有两种用法。
在这种情况下,
__name__
是foo
,代码段不会执行,也不会打印XXXX
。当直接执行时,
__name__
与__main__
相同,并且执行该部分中的代码并打印XXXX
使用此功能在同一模块中编写各种单元测试的一种方法。
其他人都已经回答过了,但我想我还有别的事要补充。
使用
if
语句调用main()
(没有特定顺序)的原因:其他语言(如C和Java)有一个
main()
函数,该函数在程序执行时调用。使用这个if
,我们可以使Python的行为像它们一样,这对许多人来说更为熟悉。代码将变得更干净,更容易阅读,更有条理。(是的,我知道这是主观的)
可以将python代码作为一个模块,
import
而不会产生有害的副作用。这意味着可以对该代码运行测试。
这意味着我们可以将代码导入到一个交互式python shell中并测试/调试/运行它。
def main
中的变量是局部变量,而外部变量是全局变量。这可能会引入一些错误和意外行为。但是,不需要编写
main()
函数并在if
语句中调用它。我自己通常开始写一些没有任何功能的小脚本。如果脚本变得足够大,或者我觉得将所有代码放在函数中对我有好处,那么我重构代码并执行它。当我编写
bash
脚本时也会发生这种情况。即使你把代码放在主函数中,你也不需要像那样写它。一个巧妙的变化可能是:
这意味着您可以从传递自定义参数的其他脚本(或交互式shell)调用
main()
。这在单元测试或批处理时可能有用。但是请记住,上面的代码需要解析argv,因此最好使用传递已解析参数的不同调用。在我编写的面向对象应用程序中,代码如下所示:
所以,请随意编写更适合您的代码。:)
如果没有主sentinel,即使脚本作为模块导入,也会执行代码。
相关问题 更多 >
编程相关推荐