所以我启动了pyscripter,我得到了一个文件:
def main():
pass
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
那是什么?为什么我的程序在没有它的情况下工作?无论如何,这是什么目的?我的代码会在哪里?让我们说一个打印你好世界的功能.那会怎么样?我在哪里打电话给它?
pok*_*oke 12
基本上,您可以定义一个中心入口点,当且仅当脚本直接运行时.因为它__name__只会等于'__main__'它,如果它是自己运行的.将脚本的实际内容放入单独的函数允许其他脚本导入所述函数并在需要时运行它,因此在导入脚本时不会立即运行.
当你只是需要快速的东西时,这也经常在libary模块中使用,以便有一些默认行为.例如,该http.server模块提供了一个广泛的功能,可以创建您自己的HTTP服务器,具有您能想到的任何功能.如果您只是想快速让一个简单的服务器监听并静态传递文件,则可以在从命令行运行时使用该模块的默认行为.
python3 -m http.server在命令行上运行将完全这样做; 运行http.server模块,它本身将在其__name__ == '__main__块中启动一个简单的HTTP服务器.
回应你的评论:
对于正常模块,作为库,包含类型或函数,您的应用程序需要,您不需要main函数或主块.对于直接调用的脚本,例如实际启动应用程序的启动脚本,您将拥有某种代码,这些代码不会封装在函数或类中,而是直接运行.那将是一个东西,你可以放入一个主要功能,然后你单独调用.这使您可以更自由地放置代码.例如,您可以main直接在文件的开头使用该函数,而在其中调用的其他函数将进一步定义到该文件中.然后脚本的最后一部分是main().你不一定需要把它放进去if __main__ == '__main__':条件,你可以直接调用它.例如,您的脚本可能如下所示:
def main ():
# doing something
utilityFunction(...)
otherUtilityFunction(...)
def utilityFunction (...):
...
def otherUtilityFunction (...):
...
main()
Run Code Online (Sandbox Code Playgroud)
如果你没有把代码放到一个单独的函数中,你必须在底部进行所有处理(在你的函数定义之后),如果你只是想快速看看你做什么,这可能会适得其反.脚本直接调用.
现在,正如我所说,你不需要把它放入主条件块; 你可以直接调用它.但是,如果由于某种原因你需要包含该文件,例如因为你想将它封装到其他东西中,或者如果你想从交互式shell(IDLE或其他东西)重复调用它,你可能不会想要在main()导入模块时运行,但只有在想要实际执行其功能时才运行.这就是你应该把main()条件放在哪里; 这样,除非你直接执行模块,否则它不会被执行.
一般来说,总是将main()呼叫置于这样的状态并不是一个坏主意,因为它永远不会受到伤害,但往往会在稍后的某些时候变得有用.
| 归档时间: |
|
| 查看次数: |
10107 次 |
| 最近记录: |