为什么使用def main()?
可能重复:
if __name__== "__main__"
做什么?
我见过一些代码示例和教程使用
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)
我只是想知道主音是否有韵?
如果没有主标记,即使脚本作为模块导入,代码也会执行。
其他人已经回答了,但我想我还有其他的东西要补充。
if
声明调用main()
(没有特定的顺序)的原因:
-
其他语言(如C和Java)有一个
main()
函数,在程序执行时调用。if
使用这个,我们可以使Python像他们一样行事,这对于很多人来说都更为熟悉。 -
代码将更清晰 ,更易于阅读和更好的组织。 (是的,我知道这是主观的)
-
这将是可能的
import
该Python代码作为一个模块没有讨厌的副作用。-
这意味着可以针对该代码运行testing。
-
这意味着我们可以将这些代码导入到一个交互式的python shell中,然后testing/debugging/运行它。
-
-
def main
中的variables是本地的 ,而外部的variables是全局的 。 这可能会引入一些错误和意外的行为。
但是,你不需要写一个main()
函数并在一个if
语句中调用它。
我自己通常开始写没有任何function的一次性小脚本。 如果脚本变得足够大,或者如果我觉得把所有的代码放在一个函数里面都会使我受益,那么我会重构这些代码。 当我编写bash
脚本时也会发生这种情况。
即使你把代码放在主函数中,你也不需要像这样写。 一个整洁的变化可能是:
import sys def main(argv): # My code here pass if __name__ == "__main__": main(sys.argv)
这意味着您可以从其他脚本(或交互式shell)调用传递自定义参数的main()
。 这可能在unit testing或批处理时很有用。 但要记住,上面的代码需要parsingargv,所以最好使用不同的调用来传递已经parsing过的参数。
在我写的一个面向对象的应用程序中,代码如下所示:
class MyApplication(something): # My code here if __name__ == "__main__": app = MyApplication() app.run()
所以,随意写出更适合你的代码。 🙂
如果foo.py的内容
print __name__ if __name__ == '__main__': print 'XXXX'
一个文件foo.py可以用两种方式使用。
- 导入另一个文件:
import foo
在这种情况下, __name__
是foo
,代码段不会被执行,也不会打印XXXX
。
- 直接执行:
python foo.py
直接执行时, __name__
与__main__
相同,并执行该部分的代码并打印XXXX
使用这个function来在同一模块中编写各种unit testing。
“ if __name__==“__main__”:
do? ”已经被回答了。
有一个main()
函数可以让你调用它的function,如果你import
模块。 这个(恕我直言)的主要(没有双关语意)的好处是你可以unit testing它。
考虑第二个脚本。 如果您将其导入另一个,则将执行“全局级”指令。