认为标题总结了问题: - )
答案 0 :(得分:41)
脚本通常是可直接执行的代码段,由它自己运行。模块通常是一个库,由其他代码片段导入。
请注意没有内部区别 - 两者都是可执行的和可导入的,尽管库代码在直接执行并导入设计为的代码时通常不会执行任何操作(或只运行其单元测试)是一个脚本将导致它执行,因此常见的if __name__ == "__main__"
测试。
答案 1 :(得分:16)
任何Python模块都可以作为脚本执行。唯一重要的区别是,当作为模块导入时,文件名用作模块名称的基础,而如果将其作为脚本执行,则模块名为__main__
。
这种区别使得通过在由if __name__=="__main__"
保护的块中包含脚本特定代码来导入时可以有不同的行为。众所周知,当用户尝试以自己的名义导入主模块而不是导入__main__
时会引起混淆。
脚本和模块之间的细微差别在于,当您导入模块时,系统将尝试使用现有的.pyc文件(前提是它存在并且是最新版本的Python)以及是否必须编译从.py文件中,它将尝试保存.pyc文件。当您将.py文件作为脚本运行时,它不会尝试加载以前编译的模块,也不会尝试保存已编译的代码。出于这个原因,可能值得保持脚本较小以最小化启动时间。