我是从上到下编码还是使用if __name__ ==" __ main __"约定?

时间:2016-02-11 19:06:00

标签: python

我的大多数Python脚本(主要是针对网页抓取/数据科学应用程序编写的)都遵循以下格式:

# import whatever packages
import x, y, z

# do some web-scraping and data manipulation

# write some niche function I need

# make some plots and basically end the script

这一切都是通过交互式编辑器/控制台(如Eclipse)完成的。我基本上编写了上面的代码,然后复制粘贴下面的代码进行测试。

是否有更多"标准"怎么办呢?我知道C具有在main函数之上定义的函数,我在Python中看到具有if __name__ == "__main__"约定的包;这是"适当的"怎么去发展?我想核心问题是你是否希望能够使用你在其他项目中编写的函数。

2 个答案:

答案 0 :(得分:1)

使用if __name__ == "__main__"的主要原因是,如果从其他文件导入文件,则其下的代码不会运行。当在python中导入文件时,它只是通过解释器运行,就好像它已经粘贴在那一点一样,但通常你只需要在文件中定义的函数,而不是在文件中运行任何代码。

例如,如果您想测试文件中的函数,或者在另一个文件中使用它们,您可以将实际运行函数的代码放在if __name__ == "__main__"下。

由于您为自己的消费编写代码,因此您是否要将代码置于if __name__ == "__main__"之下,完全取决于您,但如果您想要以可重用的方式编写代码。

Python中没有关于如何组织代码的官方普遍遵循的标准。关于您的具体问题,为了便于阅读,并遵循常见的样式模式,我建议您将功能置于顶部,并将您的网页抓取,数据操作和绘图分组到底部。

答案 1 :(得分:0)

我见过以前在文件中的不同位置写有if __name__ == "__main__"的Python包,以及在同一文件的其他地方定义的main()。不过,我相信它应该放在您打算作为主要文件的底部

例如,它看起来像这样:

import everything

define class1
    define function1

define class2
    define function2
    define function3

define main()
    call function3
    call function4
    do_things

define function4
define function5

if __name__ == "__main__":
    run_main()

上面的示例是我实际上在工作中运行的非常通用的版本。执行时,它会调用其他一些文件,并且工作得很漂亮。它甚至在if __name__ == "__main__":块中检查以检查Python的最低版本。

希望这有帮助。