Python的等效“public static void main”

时间:2010-05-25 19:00:57

标签: java python

什么是Python相当于“public static void main(String [] args){...}”?我记得过去曾经使用它然后忘了。

我基本上想要记住的是一个功能,我认为包括一些下划线(__)......

THX

6 个答案:

答案 0 :(得分:22)

#!/usr/bin/env python

import sys

def main(args):
    print args

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

编辑:模拟void返回。

答案 1 :(得分:10)

if __name__ == "__main__":
    ....do your thing

答案 2 :(得分:9)

这是一种常用的习语,但它不等同于Java的public static void main(String args[])所有 Python模块在模块范围内从上到下执行所有语句。对于大多数导入的模块,这些语句通常仅限于类和方法定义,它们在模块的命名空间中设置值,但实际上并不执行函数的代码。但是如果你在SPECIAL_CONSTANT = 42这样的模块范围内放置一个语句,那么当导入模块或独立运行时,这将立即运行 - 不需要main()__main__或其他任何东西。尝试在简单模块的顶部放置print语句。无论您是导入该模块还是从命令行自行运行该模块,print语句都将始终执行。

这个成语的好处在于它允许您将一些简单的测试或演示代码嵌入到一个库中,该库通常由客户编写的某个模块导入。也许是这样的:

# special_super_duper_module.py

# this next statements will run, even though not in main() or set off
# with "__name__ ==" tests or any such thing
print "You are using special_super_duper_module.py, written by Felix the Cat"
SPECIAL_CONSTANT = 42

def super_duper_function1():
    pass

def super_duper_function2():
    pass

if __name__ == "__main__":
    print "You are running special_super_duper_module.py interactively"
    assert super_duper_function1() == None, "expected None, got non-None result"
    assert super_duper_function2() == None, "expected None, got non-None result"
    # doctests or unittests could also go here, or just a simple demo

当某些想要使用超级duper函数的代码导入模块时,顶部的小横幅将打印出来,但由if __name__ etc.... 条件化的代码将不会跑步。但是如果您的用户使用python命令直接运行模块,那么嵌入式测试或演示代码运行。

相比之下,public static void main(String args[])是一种特殊的方法签名,它告诉Java VM开始使用什么类的方法。 Python只是从命名模块的顶部开始,然后从那里开始运行。这就是为什么你只需要写:

print "Hello, World!"

在一个模块中单独编写你的第一个Python程序。

答案 3 :(得分:1)

喔!

if __name__ == '__main__':

答案 4 :(得分:1)

上面的经典版本是最常用的,但对于更全面的内容,请查看Guido van Rossum的博客文章:

All Things Pythonic: Python main() functions(另请查看the comments

答案 5 :(得分:1)

它可能是这样的......

import sys


class Main:
    @staticmethod
    def __init__(*args: str) -> None:
        print("Hello world")
        return


if __name__ == '__main__':
    Main()