首页 > 编程问答 >Python 中的“样板”代码?

Python 中的“样板”代码?

时间:2024-07-28 05:14:41浏览次数:14  
标签:python boilerplate

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

相关文章

  • Python 中类型友好的委托
    考虑以下代码示例defsum(a:int,b:int):returna+bdefwrap(*args,**kwargs):#delegatetosumreturnsum(*args,**kwargs)该代码运行良好,只是类型提示丢失了。在Python中使用*args,**kwargs来实现​​委托模式是很常见的。如果有一种方法可......
  • 使用 python 支持构建自定义 vim 二进制文件
    背景Debian11vim软件包不包含python3支持。请参阅标题为“Debian11vim中不支持python-证据”的部分下面我需要vim支持python3YouCompleteMevim插件为了构建一个新的,我将vim9.0tarball下载到v......
  • 如何在Python 3.12+中正确使用泛型来提高代码质量?
    我正在尝试使用泛型来改进FastAPI应用程序中的类型注释。我有一个抽象存储库类,在其中使用泛型:fromabcimportABC,abstractmethodfromtypingimportListclassAbstractRepository[T](ABC):@abstractmethodasyncdefadd_one(self,data:dict)->T:......
  • python中的while循环不退出
    我试图完成第一年的python商业课程作业,但我的while循环无法退出,有人能帮忙吗?commisionTable=[{"admin_fee":100,"comm_rate":0.10},{"admin_fee":125,"comm_rate":0.12},{"admin_fee":150,"comm_rate":......
  • python---json文件写入
    ​ 使用到的知识点:os模块执行linux指令、json.dump()、withopenasf代码实现importsysimportosimportjson #向json文件file中添加内容data,其中data的类型为字典defwrite_json(file,data):    #如果文件存在,则删除    if(os.path.exists(fi......
  • python错题记录:布尔运算与逻辑值检测
    一前言环境:python3.10win10二布尔运算与逻辑值检测1案例案例1如上,在布尔运算时,有些时候代码只会运算前面的一部分,剩下的部分根本不会运算。以前在练习算法代码时,就利用这个规则来减少代码的工作量案例2如上,之前好长一段时间,上面的布尔运算总是让我感到困惑布尔运......
  • python---字典遍历
    1、三种常见的字典遍历实现defget_key_value(dics):  '''遍历所有键值对'''  forkey,valueindics.items():    print(f"{key}:{value}")defget_keys(dics):  '''遍历所有的键'''  forkeyindics......
  • python基本语法三天速成系列day1(看完这篇你就会)
    注释注释是代码非常重要的一部分,它的主要作用有:解释代码目的:注释可以说明代码段或函数的目的和功能,帮助其他开发者快速理解代码的意图。复杂逻辑说明:对于复杂的算法或业务逻辑,通过注释可以解释这些逻辑是如何工作的,降低后续维护的难度。提高可读性:良好的注释可以使代码结......