Python的"public static void main(String[] args) { ... }“等价物是什么?我记得我以前用过它,然后就忘了。
我基本上想记住的是一个函数,我认为它包含了一些下划线(__)……
thx
发布于 2010-05-25 19:02:48
#!/usr/bin/env python
import sys
def main(args):
print args
if __name__ == '__main__':
main(sys.argv)
编辑:模拟void
返回。
发布于 2010-05-25 21:30:29
这是一个常用的习惯用法,但它并不等同于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
当模块被一些想要使用您的超级复制函数的代码导入时,将打印顶部的小横幅,但由if __name__ == "__main__"
条件化的代码不会运行。但是,如果您的用户直接使用python命令运行模块,那么将运行嵌入式测试或演示代码。
相反,public static void main(String args[])
是一个特殊的方法签名,它告诉Java从哪个类的哪个方法开始。Python只是从命名模块的顶部开始,并从那里开始运行。这就是为什么你只需要写:
print("Hello, World!")
来编写你的第一个Python程序。
发布于 2010-05-25 19:03:33
if __name__ == "__main__":
....do your thing
https://stackoverflow.com/questions/2907637
复制相似问题