当前位置: 首页 > news >正文

Python-if __name__ == ‘__main__‘和collections.Mapping的用法

1.if __name__ == '__main__'

1.1解释

if __name__ == '__main__': 是 Python 中的一个常见惯用法,用于确定一个 Python 脚本是被直接运行还是被导入为模块使用。

在 Python 中,每个模块都有一个特殊的内置变量 __name__,该变量的值决定了模块的运行方式。具体来说:

  • 如果一个 Python 脚本是被直接执行的(即通过命令行或脚本编辑器运行),那么 __name__ 的值将会是字符串 '__main__'
  • 如果一个 Python 脚本是被导入为一个模块到其他脚本中使用的,那么 __name__ 的值将是该脚本的模块名。

因此,if __name__ == '__main__': 的作用是检查当前脚本是否是被直接运行的。只有当脚本被直接运行时,才会执行 if 语句块中的代码,这通常包含了脚本的主要逻辑。

这个惯用法非常有用,因为它允许编写可重用的模块,其中包含了一些功能,但只有在模块被直接执行时才会运行。当模块被导入到其他脚本中时,通常是希望避免执行模块中的主要逻辑,而只是定义和提供函数、类等。

1.2示例

例如,考虑一个名为 my_module.py 的模块:

def my_function():print("This is my function.")if __name__ == '__main__':print("This is the main part of my_module.")my_function()

如果你直接运行 my_module.py,将输出:

This is the main part of my_module.
This is my function.

但如果将 my_module.py 导入到另一个脚本中,例如 other_script.py,然后运行 other_script.py,你只会看到 "This is my function." 的输出,而不会看到 "This is the main part of my_module.",因为 if __name__ == '__main__': 部分不会执行。

2.collections.Mapping

2.1解释

collections.Mapping 是 Python 中的一个抽象基类(Abstract Base Class,ABC),它用于表示映射类型(即可用于存储键-值对的数据结构)的基类

映射类型是一种可迭代的、可存储键-值对的数据结构,通常用于实现字典(dict)等数据类型。这些数据结构允许使用键来访问相应的值,而不仅仅是按照索引访问元素。

collections.Mapping 提供了一种通用的方式来测试一个对象是否属于映射类型。这在某些情况下很有用,特别是当需要检查一个对象是否可以像字典一样使用时。通常,Python 的字典(dict)和其他映射类型都会继承自 collections.Mapping,因此它们都可以被视为映射类型。

2.2示例

演示如何使用 isinstance 来检查对象是否属于映射类型:

from collections.abc import Mapping# 创建一个字典
my_dict = {'key1': 'value1', 'key2': 'value2'}# 使用 isinstance 检查是否为映射类型
if isinstance(my_dict, Mapping):print("my_dict is a mapping type.")
else:print("my_dict is not a mapping type.")

在这个示例中,首先创建了一个字典 my_dict,然后使用 isinstance 来检查它是否属于映射类型。由于字典是映射类型的一种,所以输出结果将是 "my_dict is a mapping type."。

总之,collections.Mapping 是一个抽象基类,用于表示映射类型,它提供了一种通用的方法来测试一个对象是否可以被视为映射类型,例如字典。

http://www.lryc.cn/news/142379.html

相关文章:

  • Linux 基金会宣布正式进驻中国
  • Pyecharts教程(二):使用pyecharts绘制3D散点图——以营养元素为例
  • 软考高级系统架构设计师系列论文第100篇:论软件的可维护性设计
  • curl 使用发送POST GET请求 HEADER设置
  • 使用 Transformer 和 Amazon OpenSearch Service 构建基于列的语义搜索引擎
  • 算法通关村第九关——透彻理解二分查找
  • 【字节跳动青训营】后端笔记整理-4 | Go框架三件套之GORM的使用
  • 【TI毫米波雷达笔记】UART串口外设配置及驱动(以IWR6843AOP为例)
  • C#---第十九课:不同类型方法的执行顺序(new / virtual / common / override)
  • [pytorch]torch.cuda用法以及判断显卡是不是存在问题
  • JUC——多线程补充
  • 代码随想录第32天|122.买卖股票的最佳时机 II,55. 跳跃游戏 ,45. 跳跃游戏 II
  • Linux:Nginx服务与搭建
  • 4、什么是NoSQL
  • 如何自己实现一个丝滑的流程图绘制工具(一)vue如何使用
  • ReoGrid.NET集成到winfrom
  • Elasticsearch实现增删改查
  • Rust 学习笔记(卷二)
  • android amazon 支付接入
  • Vue2-快速搭建pc端后台管理系统
  • 【产品文档】团队介绍PPT模板
  • 组件库的使用和自定义组件
  • 网站和API支持HTTPS,最好在Nginx上配置
  • UnitTest笔记: 拓展库DDT的使用
  • 裂缝检测,只依赖OPENCV,基于YOLO8S
  • python编程环境使用技巧3-程序打包pyinstaller
  • Go 自学:defer关键字
  • 【云计算】Docker特别版——前端一篇学会
  • .net使用RabbitMQ小记
  • layUI 中 穿梭框无法获取值的细节问题