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

作者:打工人小飞 时间:2021-09-01 06:26:59 

单下划线与双下划线

在 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 就不是硬编码。

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

来源:https://huangfei.blog.csdn.net/article/details/81072335

标签:python,单下划线,双下划线,绝对导入,相对导入
0
投稿

猜你喜欢

  • Python+Selenium自动化实现分页(pagination)处理

    2022-02-23 20:09:52
  • 在asp中用集合成批操作数据库

    2008-03-10 17:22:00
  • 详解PHP的引用计数

    2023-11-14 18:00:34
  • python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例

    2021-05-05 15:44:10
  • Go mod包管理工具详解

    2024-04-30 10:08:11
  • 多级联动下拉选择框,动态获取下一级

    2008-09-04 10:34:00
  • PHP json格式和js json格式 js跨域调用实现代码

    2023-11-22 05:20:18
  • golang简单读写文件示例

    2024-05-22 10:13:21
  • 基于Python实现傻瓜式GIF制作工具

    2023-03-13 18:39:44
  • PHP获取url的函数代码

    2023-10-15 12:45:00
  • C#命名空间System.ComponentModel属性方法汇总

    2024-06-05 09:24:02
  • Python实现读取Linux系统的CPU以及内存占用

    2021-06-22 06:59:31
  • 关于Python中的编码规范

    2021-11-07 02:38:02
  • 浅析node命令行交互原理

    2024-05-11 10:14:36
  • 让Python程序定时执行的8种方法整理

    2023-05-16 01:32:22
  • Go语言开发redis封装及简单使用详解

    2024-05-08 10:53:30
  • 基于JS判断iframe是否加载成功的方法(多种浏览器)

    2023-08-24 04:14:52
  • python pycharm的安装及其使用

    2023-11-04 20:27:06
  • Vue插槽原理与用法详解

    2024-05-09 10:43:09
  • 详解Numpy扩充矩阵维度(np.expand_dims, np.newaxis)和删除维度(np.squeeze)的方法

    2023-02-13 22:24:24
  • asp之家 网络编程 m.aspxhome.com