时间:2021-05-22
在本文中,我们将介绍 Python 中 _ 字符的不同用法。就像 Python 中的许多其他内容一样,我们会看到 “_” 的不同用法主要是惯例问题。这里我们将介绍的几种不同情况:
一.单下划线(_)
单下划线通常在3种情况下使用:
1.在解析程序中
_名称指向交互式解释器会话中,最后执行的语句结果。这首先是由标准CPython解释器完成的,其他解析器也紧随其后。
>>>_Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>NameError:name'_'isnotdefined>>>42>>>_42>>>'alright!'if_else':(''alright!'>>>_'alright!'2.作为名称
这与上一点有些关联,_ 用作一次性的名称。这为了让阅读代码的人知道,这里分配了某个名称,但是不打算使用。例如,你可能对循环计数器的实际值不感兴趣:
n=42for_inrange(n):do_something()3.i18n
我们可以看到 _ 还可以用作函数。在这种情况下,它通常用于执行国际化和本地化字符串转换查找的函数的名称。这似乎源于并遵循 C 语言的相关规则。如在Django文档中所见:
fromdjango.httpimportHttpResponsefromdjango.utils.translationimportgettextas_defmy_view(request):output=_("Welcometomysite.")returnHttpResponse(output)第二个和第三个用法可能会发生冲突,因此,在任何还将 _ 用作 i18n 查找和翻译的代码块中,都应避免使用 _ 作为一次性使用的名称。
二.名称前加单下划线(例如_total)
名称前的单个下划线用于指定程序员将名称视为“私有”。这可以视为一种约定,方便阅读代码的人知道以 _ 开头的名称供内部使用。 正如Python文档所述:
带有下划线的名称(例如 _spam)应被视为 API 的非公开部分(无论是函数、方法还是数据成员)。它应被视为实现细节,如有更改,恕不另行通知。
*之所以说是一种约定,是因为它实际上对解析程序而言有着某种意义;如果我们从 import *,除非以模块/软件包的 __all__ 列表明确包含它们,否则不会导入以 _ 开头的名称。
三. 名称后的单下划线(例如 total_)
名称后面的单个下划线用于避免名称遮盖另一个名称,当然是惯例。例如,如果你想命名某种格式,为了避免掩盖 Python 的内置格式,你可以将其命名为 format_。
四. 数字字面中的单下划线(例如 100_000)
PEP 515 指数建议扩展 Python 的语法,以便下划线可以用作整体、浮点和复杂数字文本中数字分组的可视分隔符,理由是:
这是其他现代语言的常见特征,可以帮助提高较长的文字或文本的可读性,其值应清楚地分隔成部分,如字节或十六进制表示法中的单词。
因此,我们可以执行以下操作::
#十进制数按千分组amount=10_000_000.0#按字对十六进制地址进行分组addr=0xCAFE_F00D#用二进制文字将位分组为半字节flags=0b_0011_1111_0100_1110#相同,用于字符串转换flags=int('0b_1111_0000',2)五. 姓名前的双下划线(例如__total)
在名称(特别是方法名称)前使用双下划线(__)不是约定,只是对解析程序有特殊的意义。Python 管理这些名称,它用于避免名称与子类定义的名称冲突。正如Python文档所指出的那样,任何形式为__spam 的标识符(至少两个前导下划线,并且最多一个尾随下划线)在文本上均被 _classname__spam替换,其中 classname 是当前类名,其中前导下划线被去除。
以以下示例为例:
>>>classA(object):...def_internal_use(self):...pass...def__method_name(self):...pass...>>>dir(A())['_A__method_name',...,'_internal_use']如上所示,_internal_use 不变,但是 __method_name 被改成 _ClassName__method_name。 现在,如果你创建 A 的子类,比如说 B(坏、坏名字),那么你将无法轻易覆盖 A 的
>>>classB(A):...def__method_name(self):...pass...>>>dir(B())['_A__method_name','_B__method_name',...,'_internal_use']这里的预期行为几乎等同于Java中的最终方法和C ++中的常规(非虚拟)方法。
六. 在名称之前和之后加上双下划线(例如__init__)
这些是 Python 使用的特殊方法名称。对于我们来说,这只是一个约定,即 Python 系统使用与用户定义的名称不冲突的名称的一种方式。然后,我们通常会覆盖这些方法并为 Python 调用它们时定义所需的行为。例如,在编写类时__init__重写方法。
没有什么可以阻止我们编写自己的特殊方法名称(但是最好别这么做):
>>>classC(object):...def__mine__(self):...pass...>>>dir(C)...[...,'__mine__',...]尽量不要使用这种命名方式,只需要让Python定义的特殊名称遵循该约定即可。
以上就是python 各种下划线的作用的详细内容,更多关于python 下划线的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
word弄下划线,其方法有: 1、首先选中需要打下划线的区域,选中【菜单栏】中的【下划线】。点击【下划线】,可打下划线,按【回车键】可添加多个下划线。 2、
word弄下划线的方法如下: 1、首先选中需要打下划线的区域,选中【菜单栏】中的【下划线】。点击【下划线】,可打下划线,按【回车键】可添加多个下划线。 2、
网友提问:平时在word里面输入文字和添加下划线的时候下划线往往会随之输入文字的不同而不一致那么怎样才能固定好下划线制作等长下划线呢让word文本更加美观下面小
word设置下划线,其方法有: 1、首先选中需要打下划线的区域,选中【菜单栏】中的【下划线】。点击【下划线】,可打下划线,按【回车键】可添加多个下划线。 2
如文字下面加下划线,能够更好的突出重点;如波浪下划线、双下划线等各种不同的下划线,这些都是怎么输入的呢?那就要仔细看看本文了,接下来Word联盟会以Word20