coding-style - 为什么使用def 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 像它们一样运行,这对很多人来说都很熟悉。

  • 代码将 clean,易于阅读,组织良好。 ( 是的,我知道这是主观的)

  • 可以 import python 代码作为一个模块没有严重的副作用。

    • 这意味着可以根据该代码运行测试。

    • 这意味着我们可以将该代码导入到交互式 python shell和 test/debug/run 。

  • 内部变量 def main当地,而外面是全球 这可能会引入一些 Bug 和意想不到的行为。

但是你不要求编写一个 main() 函数,称之为 if 语句里。

我自己通常开始编写小型的抛弃脚本,没有任何函数。 如果脚本足够大,或者我觉得把所有的代码放在一个函数里会使我受益,那么我重构代码并做它。 当我编写 bash 脚本时也会发生这种情况。

即使你在main函数中放入代码,你也不需要将它的完全写入。 一个细微的变化可能是:


import sys

def main(argv):
 # My code here
 pass

if __name__ =="__main__":
 main(sys.argv)

这意味着可以调用 main() 从其他脚本( 或者交互式外壳) 传递自定义参数。 这在单元测试或者batch-processing中可能有用。 但是,请记住上面的代码需要对argv进行解析,因此最好使用一个传递参数已经解析的不同调用。

在我编写的object-oriented应用程序中,代码如下所示:


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

使用这种方法的优点是,在同一模块中可以编写各种类型的单元测试。

" if __name__=="__main__": 做什么? 已经被应答。

有一个 main() 函数可以让你调用它的功能如果你在 import 上。 这个( 恕见谅) ( 无双关双关) 主要的好处是你可以 单元测试 它。

...