python中的单下划线与双下划线以及绝对导入与相对导入

 更新时间:2022年11月02日 14:05:37   作者:打工人小飞  
这篇文章主要介绍了python中的单下划线与双下划线以及绝对导入与相对导入说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

单下划线与双下划线

在 python 中,会看到 _xx, xx 以及 __xx 这样的变量或者函数名,在这里做一个简要的总结。

  • _xx:保护(protected)变量或函数,意思是只有类对象和子类对象能够访问到这些变量,不能用 ‘from module import *’ 导入。当变量或函数是私有的时候,用 _xx 来表示是很好的习惯。;
  • __xx:私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据;
  • _xx_:代表 python 里特殊方法专用的标识,如 _init_() 代表类的构造函数。变量名 _xx_ 对 python 来说有特殊含义,对于普通的变量应当避免这种命名风格。

下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,应避免用下划线作为变量名的开始。

绝对导入与相对导入

既然上文说到了包的导入,就顺便把 python 的包内导入规则说一下,分为绝对导入与相对导入。

  • 相对导入:在不指明 package 名的情况下导入自己这个 package 的模块,比如一个 package 下有 a.py 和 b.py 两个文件,在 a.py 里 from . import b 即是相对导入 b.py;
  • 绝对导入:指明顶层 package 名。比如 import a,python 会在 sys.path 里寻找所有名为 a 的顶层模块。

在 3.0 以前的旧版本中启用相对导入等特性所必须的 _future_ 语句:

from __future__ import absolute_import

python 包的概念:包含 _init_.py 文件的目录,该文件在包导入时会被首先执行,该文件可以为空,也可以在其中加入任意合法的 python 代码。

相对导入的特点:可以避免硬编码带来的维护问题,例如我们改了某一顶层包的名,那么其子包所有的导入就都不能用了。

但是 存在相对导入语句的模块,不能直接运行,否则会有异常:

ValueError: Attempted relative import in non-package

尽管使用相对导入看起来像是浏览文件系统,但是不能到定义包的目录之外。也就是说,使用点的这种模式从不是包的目录中导入将会引发错误。

绝对导入的特点:可以避免与标准库命名的冲突,实际上也不推荐自定义模块与标准库命令相同。

硬编码的概念

与软编码的区别是,软编码可以在运行时确定,修改;而硬编码是不能够改变的。

举个例子:

例如求圆的面积问题,那么 3.14*r*r 就是硬编码,而 PI*r*r 就不是硬编码。

把数值写成常数而不是变量即硬编码。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于Python中isfile函数和isdir函数使用详解

    基于Python中isfile函数和isdir函数使用详解

    今天小编就为大家分享一篇基于Python中isfile函数和isdir函数使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python爬虫实战之最简单的网页爬虫教程

    python爬虫实战之最简单的网页爬虫教程

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。下面这篇文章就来给大家介绍了关于利用python实现最简单的网页爬虫的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • python调用百度语音识别实现大音频文件语音识别功能

    python调用百度语音识别实现大音频文件语音识别功能

    这篇文章主要为大家详细介绍了python调用百度语音识别实现大音频文件语音识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 教你如何在Pytorch中使用TensorBoard

    教你如何在Pytorch中使用TensorBoard

    TensorBoard是TensorFlow中强大的可视化工具,今天通过本文给大家介绍如何在Pytorch中使用TensorBoard,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友一起看看吧
    2021-08-08
  • Pytorch使用MNIST数据集实现基础GAN和DCGAN详解

    Pytorch使用MNIST数据集实现基础GAN和DCGAN详解

    今天小编就为大家分享一篇Pytorch使用MNIST数据集实现基础GAN和DCGAN详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Django获取该数据的上一条和下一条方法

    Django获取该数据的上一条和下一条方法

    今天小编就为大家分享一篇Django获取该数据的上一条和下一条方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 使用Python对Dicom文件进行读取与写入的实现

    使用Python对Dicom文件进行读取与写入的实现

    这篇文章主要介绍了使用Python对Dicom文件进行读取与写入的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python实现把PDF文件转换成长图PNG格式输出图片

    Python实现把PDF文件转换成长图PNG格式输出图片

    在日常工作中,我们经常会需要将一个 PDF 文件转换为一张长图(PNG 格式),本文将手把手教你如何使用 Python 实现 PDF和 PNG 长图的转换,需要的小伙伴可以了解下
    2025-09-09
  • Python+Qt相片更换背景颜色窗体程序的步骤详解

    Python+Qt相片更换背景颜色窗体程序的步骤详解

    QT+Python是非常经典的窗体编程组合,功能完善,可视化界面美观易维护,这篇博客针对相片更换背景颜色方面编写代码,代码整洁,规则,易读,对学习与使用Python有较好的帮助,需要的朋友可以参考下
    2022-12-12
  • python dumps和loads区别详解

    python dumps和loads区别详解

    这篇文章主要介绍了python dumps和loads区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论