Python3中_和__的用途和区别

目录

一、_(下划线)

1、临时变量:

2、未使用的变量:

二、__(双下划线)

1、私有属性:

2、私有方法:

三、__的一些特殊用途。

总结


Python3中的_和__是两个特殊的标识符,它们在Python中有不同的用途和区别。下面我将详细介绍这两个标识符的用途和区别,并结合代码示例进行说明。

一、_(下划线)

_在Python中通常用作临时变量或未使用的变量。它的作用是在调试或临时存储数据时使用,通常不会在代码中保留。

1、临时变量:

在编写代码时,我们经常需要临时存储一些中间结果或临时值。在这种情况下,可以使用_作为临时变量。例如:

result = 1 + 2  
_ = result * 2  # 临时存储result * 2的结果  
print(_)  # 输出4

在这个例子中,_被用作一个临时变量,用于存储result * 2的结果,以便稍后使用。

2、未使用的变量:

在编写函数或方法时,有时我们会定义一些参数,但实际上并不需要使用它们。此时,可以使用_来表示该参数未被使用。例如:

def my_function(a, b, c=None):  if c is None:  _ = a + b  # c未被使用,使用_表示  else:  _ = a - b  # c被使用,这里用_表示c未被使用  return _

在这个例子中,如果调用my_function(1, 2),则c参数未被使用,因此使用_来表示。如果调用my_function(1, 2, 3),则c参数被使用,因此这里的_表示c未被使用。

需要注意的是,虽然_可以用于临时存储数据或表示未使用的变量,但在实际编程中应该避免过度使用它。因为过度使用会导致代码可读性降低,且可能会引起混淆。

二、__(双下划线)

__在Python中有特殊的含义,它用于表示私有属性和方法。当一个变量或方法名前面有两个下划线时,它会被视为私有属性或方法,不能直接从外部访问。

1、私有属性:

私有属性是指在类内部定义的属性,不能直接从外部访问。在Python中,通过在属性名前面加上两个下划线来定义私有属性。例如:

class MyClass:  def __init__(self):  self.__private_attribute = "Hello, World!"  # 定义私有属性  def public_method(self):  print(self.__private_attribute)  # 可以访问私有属性

在这个例子中,__private_attribute是一个私有属性,不能直接从外部访问。但是可以通过类的公共方法来访问它。

2、私有方法:

私有方法是指在类内部定义的方法,不能直接从外部调用。在Python中,通过在方法名前面加上两个下划线来定义私有方法。例如:

class MyClass:  def __init__(self):  pass  def __private_method(self):  print("This is a private method.")  # 定义私有方法  def public_method(self):  self.__private_method()  # 可以调用私有方法

在这个例子中,__private_method()是一个私有方法,不能直接从外部调用。但是可以通过类的公共方法来调用它。

需要注意的是,虽然私有属性和方法可以提高代码的封装性和安全性,但过度使用也可能导致代码可读性和可维护性降低。因此,在使用时应该根据具体情况进行权衡。


三、__的一些特殊用途。

1、__doc__:这个特殊属性用于存储一个对象的文档字符串(docstring)。当你在Python交互式解释器或IDE中输入help()时,就会显示这个docstring。例如:

class MyClass:  def __init__(self):  """This is a docstring for MyClass."""  pass  help(MyClass)

这段代码会显示MyClass的docstring:"This is a docstring for MyClass."
2. __file__:这个特殊属性用于获取模块文件的路径名。例如:

import os  
print(os.__file__)

这段代码会输出os模块的路径。
3. __name__:这个特殊属性用于获取当前模块的名称。例如:
print(__name__)
这段代码会输出当前模块的名称。如果这个文件被直接运行,那么__name__的值就是__main__。
4. __package__:这个特殊属性用于指定一个命名空间包的名称。当一个模块被导入时,它的__package__属性被设定为导入语句中指定的包的名称,或者为None。例如:

5、__path__:这个特殊属性用于获取模块的搜索路径列表。当一个模块被导入时,它的__path__属性被设定为搜索路径列表。这个列表是一个由字符串组成的列表,每个字符串代表一个搜索路径。例如:
6、__loader__:这个特殊属性用于获取负责加载该模块的模块加载器对象。例如:
7、__cached__:这个特殊属性用于获取编译后的模块源码或bytecode缓存的路径。例如:当一个模块被导入时,Python会将其源码或字节码缓存起来以减少重新编译的时间。__cached__属性就是指向这个缓存文件的路径。例如:
8、__import__() 和 __importlib__():这两个函数用于动态地导入模块。其中,__import__()函数是Python内建的,用于导入模块;而__importlib__()函数是一个第三方库提供的,功能更加强大和灵活。例如:使用这两个函数可以动态地导入模块,并且可以在导入过程中执行自定义的代码。例如:使用这两个函数可以动态地导入模块,并且可以在导入过程中执行自定义的代码。需要注意的是,这两个函数的用法比较复杂,需要有一定的Python编程经验才能正确使用。因此,建议在使用之前先详细了解它们的文档和示例代码。

总结

在本文中,我们详细介绍了Python3中的___的用途和区别。_通常用作临时变量或未使用的变量,而__则用于表示私有属性和方法。此外,我们还介绍了__doc____file____name____package____path____loader____cached__等特殊属性,以及__import__()__importlib__()等动态导入模块的函数。

通过了解这些特殊标识符和属性的用途,我们可以更好地理解和使用Python编程语言。同时,这些知识也可以帮助我们编写更加高效、可读性和可维护的代码。

总之,掌握Python中的特殊标识符和属性的用途是提高编程技能的重要一环。希望本文的内容能够对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/284262.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

羊大师讲解,羊奶中的干物质

羊大师讲解,羊奶中的干物质 羊奶作为一种营养价值极高的乳制品,其中的干物质含量是其重要组成成分之一。干物质是指在牛奶中除去水分后剩余的成分,包括蛋白质、脂肪、乳糖、矿物质和维生素等。这些干物质不仅赋予了羊奶独特的口感和营养价值…

1U、2U、4U和42U服务器,看完秒懂!

晚上好,我的网工朋友。 服务器是一个很广泛的概念,涵盖了各种类型和规格的计算机,用于提供各种网络和数据服务。 而机架服务器是当前数据中心和专业计算环境中,使用最为广泛的服务器类型之一。 机架式服务器的外形看来不像计算…

Spring Cloud Alibaba核心技术宝典,分布式系统中间件实战案例(百度云下载)

前言 《Spring Cloud Alibaba学习笔记》其实是阿里的微服务解决方案,是阿里巴巴结合自身微服务实践,开源的微服务全家桶,在Spring Cloud项目中孵化成为Spring Cloud的子项目。第一代的Spring Cloud标准中很多组件已经停更,如:Eureak,zuul等。…

05-Autoscaling

1 Knative的自动缩放机制 “请求驱动计算”是serverless的核心特性 缩容至0:即没有请求时,系统不会分配资源给Kservice;从0开始扩容:由Activator缓存请求,并报告指标数据给Autoscaler;按需扩容:…

说一下 jvm 有哪些垃圾回收算法?

说一下 jvm 有哪些垃圾回收算法? 一.对象是否已死算法 1.引用计数器算法 2.可达性分析算法 二.GC算法 1.标记清除算法 如果对象被标记后进行清除,会带来一个新的问题–内存碎片化。如果下次有比较大的对象实例需要在堆上分配较大的内存空间时&#xff0…

【Axure高保真原型】3D商品销售可视化模板

今天和大家分享3D商品销售大屏可视化的原型模板,里面包括常用的3D条形图、3D柱状图、3D饼图、3D环形图、3D金字塔图,鼠标移入图表,对应区域会高亮变色,并且显示对应的数据标签,鼠标移入地图标点后,可以显示…

2023 OADC:开放原子云社区正式启航,Curve、Kyuubi获奖

12月16-17日,2023开放原子开发者大会(OADC)在江苏省无锡市召开。大会首日,由网易数帆联合发起的“开放原子云社区”宣告成立,随后网易数帆资深云原生专家侯诗军分享了稳定性保障的前沿实践,Curve、Apache K…

每天五分钟计算机视觉:网络中的网络(NiN)

本文重点 前面的课程中我们学习了众多的经典网络模型,比如LeNet、AlexNet、VGG等等,这些网络模型都有共同的特点。 它们的特点是:先由卷积层构成的模块充分提取空间特征,然后再由全连接层构成的模块来输出分类结果。也就是说它们…

【RTOS学习】源码分析(通用队列 队列 队列集)

🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 前面本喵讲解了和任务相关的FreeRTOS源码,进行再来介绍一下用于任务间通信的几种数据结…

开发新功能,在idea中创建新分支

开发新功能,在idea中新建自己的分支,要在dev分支上创建,步骤如下: 1、idea右下角可以看见当前在dev分支上 2、点击dev,接着点击New Branch 输入分支名 创建后,在Local Branches中就有了 此时可以看到已经切…

漏洞复现-某友CRM系统某接口存在任意文件读取(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

揭开`this`的神秘面纱:探索 JavaScript 中的上下文密钥(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…