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写的Tkinter程序屏幕居中方法

    2022-08-03 17:53:07
  • 如何制作关联的下拉菜单?

    2010-06-29 21:19:00
  • python并发编程多进程 模拟抢票实现过程

    2022-03-07 11:53:05
  • python实现雨滴下落到地面效果

    2021-10-04 03:58:32
  • python web.py启动https端口的方式

    2021-10-20 11:33:44
  • Python设计模式之MVC模式简单示例

    2023-02-24 16:58:33
  • python 图片验证码代码

    2023-07-22 00:33:19
  • golang实践-第三方包为私有库的配置方案

    2023-06-25 06:05:32
  • SQL查询入门(中篇)

    2011-09-30 11:15:09
  • Python技巧之四种多线程应用分享

    2021-12-04 12:11:57
  • python 使用元类type创建类

    2021-06-27 21:11:48
  • 如何完美的建立一个python项目

    2021-02-20 21:07:26
  • 详解Python中使用base64模块来处理base64编码的方法

    2022-01-12 01:27:19
  • JavaScript 实现模态对话框 源代码大全

    2023-08-22 20:32:24
  • 设计可以量化吗?

    2009-06-12 12:12:00
  • 如何使用Python的Requests包实现模拟登陆

    2022-10-07 03:12:26
  • 用户体验之内容篇

    2010-11-05 18:21:00
  • 科讯cms文章分页列表页码样式的修改

    2008-07-10 13:11:00
  • 最近写的一个asp缓存函数

    2008-11-25 14:07:00
  • 详解pandas中iloc, loc和ix的区别和联系

    2023-03-20 18:56:01
  • asp之家 网络编程 m.aspxhome.com