python中的符号下划线_详解Python中下划线的使⽤⽅法
编程派微信号:codingpy
这篇⽂章讨论Python中下划线_的使⽤。跟Python中很多⽤法类似,下划线_的不同⽤法绝⼤部分(不全是)都是⼀种惯例约定。
单个下划线(_)
主要有三种情况:
1.解释器中
_符号是指交互解释器中最后⼀次执⾏语句的返回结果。这种⽤法最初出现在CPython解释器中,其他解释器后来也都跟进了。
2.作为名称使⽤
这个跟上⾯有点类似。_⽤作被丢弃内容的名称。按照惯例,这样做可以让阅读你代码的⼈知道,这是个不会被使⽤的特定名称。举个例
⼦,你可能⽆所谓⼀个循环计数的值:
3.i18n
_还可以被⽤作函数名。这种情况,单下划线经常被⽤作国际化和本地化字符串翻译查询的函数名。这种惯例好像起源于C语⾔。
举个例⼦,在Django⽂档中有⼀个这样的⽤法:
第⼆种和第三种⽤法会引起冲突,所以在任意代码块中,如果使⽤了_作i18n翻译查询函数,就应该避免再⽤作被丢弃的变量名。
单下划线前缀的名称(如_shahriar)
以单下划线做前缀的名称指定了这个名称是“私有的”。在有些导⼊import*的场景中,下⼀个使⽤你代码的⼈(或者你本⼈)会明⽩这个名
称仅内部使⽤。
之所以说在在有些import*的场景,是因为导⼊时解释器确实对单下划线开头的名称做了处理。如果你这么写fromimport*,任何以单下
划线开头的名称都不会被导⼊,除⾮模块/包的__all__列表明确包含了这些名称。
双下划线前缀的名称(如__shahriar)
以双下划线做前缀的名称(特别是⽅法名)并不是⼀种惯例;它对解释器有特定含义。Python会改写这些名称,以免与⼦类中定义的名称产⽣
冲突。Python官⽅⽂档中提到,任何__spam这种形式(⾄少以两个下划线做开头,绝⼤部分都还有⼀个下划线做结尾)的标识符,都会在⽂
本上被替换为_classname__spam,其中classname是当前类名,并带上⼀个下划线做前缀。
看下⾯这个例⼦:
正如所料,_internal_u没有变化,但__method_name被改写成了_ClassName__method_name。
现在创建⼀个A的⼦类B(这可不是个好名字),就不会轻易的覆盖掉A中的__method_name了:
这种特定的⾏为差不多等价于Java中的final⽅法和C++中的正常⽅法(⾮虚⽅法)。
前后都带有双下划线的名称(如__init__)
这些是Python的特殊⽅法名,这仅仅是⼀种惯例,⼀种确保Python系统中的名称不会跟⽤户⾃定义的名称发⽣冲突的⽅式。通常你可以覆
写这些⽅法,在Python调⽤它们时,产⽣你想得到的⾏为。例如,当写⼀个类的时候经常会覆写__init__⽅法。
你也可以写出⾃⼰的“特殊⽅法”名(但是别这么做):
还是不要这样写⽅法名,只让Python定义的特殊⽅法名使⽤这种惯例吧。翻译:chevalier
本文发布于:2022-12-08 09:14:16,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/65127.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |