Google 有一个 Python 教程,他们将样板代码描述为“不幸的”,并提供了以下示例:
#!/usr/bin/python
# import modules used here -- sys is a very standard one
import sys
# Gather our code in a main() function
def main():
print 'Hello there', sys.argv[1]
# Command line args are in sys.argv[1], sys.argv[2] ..
# sys.argv[0] is the script name itself and can be ignored
# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
main()
现在,我听说样板代码被描述为“看似重复的代码,一次又一次地出现,以获得一些结果”看起来应该更简单”( 示例 )。
无论如何,在Python中,上面示例中被视为“样板”代码的部分是:
if __name__ == '__main__':
main()
现在,我的问题是如下:
1) Python 中的样板代码(如提供的示例)是否采用与我提供的定义相同的定义?如果是这样,为什么?
2) 这段代码是否必要?在我看来,无论是否有 main 方法,代码都会运行。是什么让使用此代码更好?它更好吗?
3) 我们为什么使用该代码以及它提供什么服务?
4) 这种情况在整个 Python 中都会发生吗?还有其他“样板代码”的例子吗?
哦,只是一个题外话:你需要
import sys
在Python中使用命令行参数吗?如果它不存在,它如何处理此类争论?
对 Python 样板文件代码的疑问问得好!让我们来分解一下:
1. Python 中样板文件的定义
所引用的定义总体上是准确的。在 Python 中,"样板文件"代码是指那些为了满足特定结构或惯例而包含的,但并不直接有助于程序核心逻辑的代码段。
就
if __name__ == "__main__":
块而言,它确实符合样板文件的定义,因为它具有结构性的目的,而并非严格意义上程序逻辑所必需的。
2. 这段代码的必要性
说得对,无论是否包含
if __name__ == "__main__":
块,这段特定的代码都能运行。那么,它的意义何在呢?
-
作为模块运行与直接运行 :这段代码的妙处在于它能够区分的 Python 文件是作为脚本直接运行,还是作为另一个文件导入的模块运行。
-
当直接运行文件时,
__name__
变量会被设置为"__main__"
,导致if
块内的代码执行。 -
如果将文件作为模块导入,则
__name__
将包含模块的名称,if
块内的代码将被跳过。
-
当直接运行文件时,
-
组织与可重用性 :对于小型程序来说,这可能看起来没那么重要,但对于大型项目,它有助于组织代码并提高可重用性。通过将主要功能放在
main()
函数中,可以从其他脚本导入和重用它们,而无需运行整个脚本。
3. 目的与优势
简而言之,
if __name__ == "__main__":
块提供了以下功能:
- 控制执行流程 :它决定了哪些代码在脚本运行时执行,哪些代码在作为模块导入时不执行。
- 代码组织 :它鼓励将主要逻辑封装在函数中,使的代码更具可读性和组织性。
- 可重用性 :它支持从其他脚本重用函数和类,而不会产生意外的副作用。
4. Python 中的其他样板文件
尽管
if __name__ == "__main__":
块可能是最常见的,但 Python 中还有其他一些样板文件的例子,尤其是在使用特定框架或库时:
- Web 框架(如 Flask 或 Django) :这些框架通常具有用于定义路由、处理请求和启动服务器的特定代码结构。
- 单元测试 :测试框架(如 unittest 或 pytest)具有用于编写和组织测试的特定方法。
题外话:
import sys
与命令行参数
是对的!要访问 Python 中的命令行参数,需要
import sys
。
sys.argv
列表存储这些参数,其中
sys.argv[0]
是脚本名称,后面的元素是传递的参数。
如果没有
import sys
,将无法访问
sys.argv
,并且尝试使用它将导致
NameError
。
希望这能消除对 Python 样板文件代码的疑惑!
标签:python,boilerplate From: 7898049