Java Python';s相当于;“公共静态无效主控”;

Java Python';s相当于;“公共静态无效主控”;,java,python,Java,Python,Python的“publicstaticvoidmain(String[]args){…}”等价物是什么?我记得以前用过,后来就忘了 我基本上想记住的是一个函数,我想它包含了一些下划线(__;) thx 编辑:模拟一个void返回。哦 if __name__ == "__main__": ....do your thing 上面的经典版本是最常用的,但要了解更全面的内容,请查看Guido van Rossum的博文: (查看更多信息)这是一个常用的习惯用法,但它并不等同于Java的公共

Python的“publicstaticvoidmain(String[]args){…}”等价物是什么?我记得以前用过,后来就忘了

我基本上想记住的是一个函数,我想它包含了一些下划线(__;)

thx

编辑:模拟一个
void
返回。

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

上面的经典版本是最常用的,但要了解更全面的内容,请查看Guido van Rossum的博文:


(查看更多信息)

这是一个常用的习惯用法,但它并不等同于Java的
公共静态void main(String args[])
。所有Python模块在模块范围内自上而下执行所有语句。对于大多数导入的模块,这些语句通常仅限于类和方法定义,它们在模块的命名空间中设置值,但实际上并不执行函数的代码。但是,如果在模块作用域中放置一条语句,如
SPECIAL\u CONSTANT=42
,则在导入模块或独立运行模块时,该语句将立即运行-无需
main()
\u main\u
或其他任何内容。尝试在简单模块的顶部放置一个
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
当模块被一些想要使用超级复制器函数的代码导入时,顶部的小横幅将被打印出来,但是如果中的中的条件化的代码将无法运行。但是,如果您的用户直接使用python命令运行模块,那么嵌入式测试或演示代码将运行

相反,
publicstaticvoidmain(stringargs[])
是一个特殊的方法签名,它告诉JavaVM从哪个类的哪个方法开始。Python只是从命名模块的顶部开始,然后从那里开始运行。这就是为什么你只需要写:

print("Hello, World!")

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

在这里还有一个名为
main(args)
的方法,这有点让人困惑,因为它没有什么特殊之处导致Python运行时调用它。这是对
\uuu name\uuu==“uuuu main\uuuuu”
的检查,它不完全是一个
无效
返回,是吗?:)@Daniel DiPaolo:Java不允许您在正常退出期间返回值,只有在您使用
System.exit(int)
时。这与其他语言不同,因此,如果一种语言从其主方法返回一个值,则这是正确的。(
publicstaticvoidmain(String[]args)
是Java程序的入口点)@R.Bemrose您错过了编辑之前的外观。他用
main
结尾的
return0
不太正确。你需要前后两个下划线,因为它们是“神奇”的名字。+1表示综合答案,而不是肤浅的加达伦式答案:-)@John-我今天学了一个新单词。(我从来没有见过加达伦人,我从来没有希望…,等等)我讨厌
publicstaticvoidmain(String[]args)
的一点是,它对第一次开发人员来说是一个莫名其妙的障碍,而且讲师对提问者的回答总是“不要担心它的意思,只要输入就行”。我认为这是一个人必须学习的语言设计缺陷1。以main作为入口点,2。公共方法保护,3。静态方法定义,4。void表示没有返回的函数,5。一个数组声明,只是为了让程序打印你的名字!
# 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
print("Hello, World!")