编程派微信号:codingpy

这篇文章讨论Python中下划线_的使用。跟Python中很多用法类似,下划线 _ 的不同用法绝大部分(不全是)都是一种惯例约定。

单个下划线(_)

主要有三种情况:

1. 解释器中

_符号是指交互解释器中最后一次执行语句的返回结果。这种用法最初出现在CPython解释器中,其他解释器后来也都跟进了。

2. 作为名称使用

这个跟上面有点类似。_用作被丢弃内容的名称。按照惯例,这样做可以让阅读你代码的人知道,这是个不会被使用的特定名称。举个例子,你可能无所谓一个循环计数的值:

3. i18n

_还可以被用作函数名。这种情况,单下划线经常被用作国际化和本地化字符串翻译查询的函数名。这种惯例好像起源于C语言。

举个例子,在 Django文档中有一个这样的用法:

第二种和第三种用法会引起冲突,所以在任意代码块中,如果使用了_作i18n翻译查询函数,就应该避免再用作被丢弃的变量名。

单下划线前缀的名称(如_shahriar)

以单下划线做前缀的名称指定了这个名称是“私有的”。在有些导入import * 的场景中,下一个使用你代码的人(或者你本人)会明白这个名称仅内部使用。

之所以说在在有些 import * 的场景,是因为导入时解释器确实对单下划线开头的名称做了处理。如果你这么写from import *,任何以单下划线开头的名称都不会被导入,除非模块/包的__all__列表明确包含了这些名称。

双下划线前缀的名称(如__shahriar)

以双下划线做前缀的名称(特别是方法名)并不是一种惯例;它对解释器有特定含义。Python会改写这些名称,以免与子类中定义的名称产生冲突。Python 官方文档中提到,任何__spam这种形式(至少以两个下划线做开头,绝大部分都还有一个下划线做结尾)的标识符,都会在文本上被替换为_classname__spam,其中classname是当前类名,并带上一个下划线做前缀。

看下面这个例子:

正如所料,_internal_use没有变化,但__method_name被改写成了_ClassName__method_name。

现在创建一个A的子类B(这可不是个好名字),就不会轻易的覆盖掉A中的__method_name了:

这种特定的行为差不多等价于Java中的final方法和C++中的正常方法(非虚方法)。

前后都带有双下划线的名称(如__init__)

这些是Python的特殊方法名,这仅仅是一种惯例,一种确保Python系统中的名称不会跟用户自定义的名称发生冲突的方式。通常你可以覆写这些方法,在Python调用它们时,产生你想得到的行为。例如,当写一个类的时候经常会覆写__init__方法。

你也可以写出自己的“特殊方法”名(但是别这么做):

还是不要这样写方法名,只让Python定义的特殊方法名使用这种惯例吧。翻译:chevalier

译文:https://segmentfault.com/a/1190000002611411

原文:http://shahriar.svbtle.com/underscores-in-python

python中的符号下划线_详解Python中下划线的使用方法相关推荐

  1. python中yaml模块的使用_详解Python yaml模块

    一.yaml文件介绍 yaml是一个专门用来写配置文件的语言. 1. yaml文件规则 区分大小写: 使用缩进表示层级关系: 使用空格键缩进,而非Tab键缩进 缩进的空格数目不固定,只需要相同层级的元 ...

  2. python中fp是什么意思_详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3)...

    详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3) 上一节简单讲了下FP树的生成,在这一节我将描述FP树的挖掘过程. 首先我们回顾一下要挖掘的特征项及样本空间: ...

  3. python中filepath路径怎么写_详解Python中的路径问题

    1. 绝对路径引入 Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止.下面命令可以查看当前的搜索路径: import sys print(sys.path) sys.pa ...

  4. python中什么是可变参数_详解Python的三种可变参数

    详解Python的三种可变参数 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中, ...

  5. python中list[1啥意思_详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:para ...

  6. python中换行的转义符_详解Python中的各种转义符\n\r\t

    Python中的各种转义符\n\r\t 转义符 描述 \ 续行符(在行尾时) \\ 反斜杠符号 ' 单引号 " 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 ...

  7. python中怎么做分组问题_详解Python中的分组函数groupby和itertools)

    具体代码如下所示: from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools impor ...

  8. python中完整类的定义_详解Python中类的定义与使用

    类顾名思义,就是一类事物.或者叫做实例,它用来描述具有共同特征的一类事物.我们在python中声明类的关键词是class,类还有功能和属性,属性就是这类事物的特征,而功能就是它能做什么,也是就是方法或 ...

  9. python中for循环怎么打开_详解Python中for循环的使用

    for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程" 一文讨论了 if 语句和 while 循环,讨论了复合语句以及适当缩进 Python 语句来 ...

  10. python正则匹配空格+数字+空格_详解Python中正则匹配TAB及空格的小技巧

    详解Python中正则匹配TAB及空格的小技巧 发布时间:2020-10-15 08:38:48 来源:脚本之家 阅读:94 作者:杰瑞26 在正则中,使用.*可以匹配所有字符,其中.代表除\n外的任 ...

最新文章

  1. 每天一个linux命令(35):ln 命令
  2. [转载]Windows Phone 系列- 本地数据存储
  3. Boost:标记的的bimap双图测试程序
  4. 有谁熟悉WordPress不?
  5. Vue学习笔记之15-vue-router详解
  6. android复制粘贴功能,android 复制 粘贴 剪切功能应用
  7. Excel函数公式大全—MATCH函数
  8. leetcode 5724. 绝对差值和
  9. 氨基酸序列碎裂by离子-生物信息学笔记
  10. WinRAR密码破解(精)
  11. NAT+路由?内网套娃模式到底有何弊端?
  12. HTML5 canvas 参考手册
  13. java必读10本书_新技术领先者必读的6本书
  14. BI商业智能开启新时代,什么样的BI工具值得选?
  15. DSP TMS320F280049之模拟比较器CMPSS(寄存器版)
  16. [渝粤教育] 辽宁建筑职业学院 Web服务器端应用开发 参考 资料
  17. 名正则言顺谈服装品牌名称规划
  18. TLS/SSL如何使用公钥加密
  19. 外键以及数据库的增删改查你了解多少
  20. java parentcomponent_java – 在Spring中继承@Component

热门文章

  1. ae绘图未指定错误怎么办_【教程】最全的ae表达式教学分享(实用!)表达式其实很简单...
  2. UnsupportedOperationException ViewPage
  3. Chrome暂停更新?新冠疫情让Google Chrome的安全性打上了问号!
  4. python输入_Python输入
  5. Python_新手入门及画出图形
  6. Vue中获取dom元素的宽高
  7. Excel多级下拉菜单联动自动匹配内容
  8. 腾讯不得志员工,辞职做了刀塔传奇,月流水2亿,老东家腾讯肠子都悔青了!
  9. 2022流动式起重机司机考题及模拟考试
  10. python简单心形代码爱情闪字_寄语大全之qq空间伤感寄语闪字