本文目录一览:
Python中下划线的变量是什么个意思
_xxx
不能用于from module import *
。以单下划线开头的表示的是protected
类型的变量。即保护类型只能允许其本身与子类进行访问。__xxx
双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以。__xxx__
定义的是特例方法。像__init__
之类的。
python下划线定义属性
类的私有变量和私有方法。 在 Python 中可以通过在属性变量名前加上双下划线定义属性为私有属性。
特殊变量命名
_xx
以单下划线开头的表示的是protected
类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如:当使用from M import *
时,不会将以一个下划线开头的对象引入。__xx
双下划线的表示的是私有类型的变量。只能允许这个类本身进行访问了,连子类也不可以。用于命名一个类属性(类变量),调用时名字被改变(在类FooBar
内部,__boo
变成_FooBar__boo
,如self._FooBar__boo
)。__xx__
定义的是特例方法。用户控制的命名空间内的变量或是属性,如__init__
、__import__
或是__file__
。只有当文档有说明时使用,不要自己定义这类变量(就是说这些是 Python 内部定义的变量名)。 在这里强调说一下私有变量,Python 默认的成员函数和成员变量都是公开的,没有像其他类似语言的public
、private
等关键字修饰。但是可以在变量前面加上两个下划线_
,这样的话函数或变量就变成私有的。这是 Python 的私有变量轧压(这个翻译好拗口),英文是(private name mangling)。情况就是当变量被标记为私有后,在变量的前端插入类名,再类名前添加一个下划线_
,即形成了_ClassName__变量名
。
Python内置类属性
__dict__
:类的属性(包含一个字典,由类的数据属性组成)__doc__
:类的文档字符串__module__
:类定义所在的模块(类的全名是'__main__.className'
,如果类位于一个导入模块mymod
中,那么className.__module__
等于mymod
)__bases__
:类的所有父类构成元素(包含了一个由所有父类组成的元组)
Python中下划线是什么意思
- 用在 Python 解释器,表示上一次的执行结果。
即使不把 Python 用于编程,也可以把它用作智能计算器,下划线保存上次的计算结果,在计算时相当方便:
4 + 3 # 7 _ # 7 _ + 2 # 9 a = 10 _ # 9
- 代码中一个独立的下划线,表示这个变量不重要。
一个独立的下划线,它也是一个变量名,只不过它比较特殊,当你使用下划线作为变量名时,就代表你告诉大家,这个变量不重要,仅仅占个位置,可以忽略,后面不会再使用它。
当然了,这只是一种约定俗成,你要是不遵守也是可以的,毕竟在后面你还可以通过下划线来获取这个变量的值。
上面的代码表示我们只需要列表内部元组的第一个,第二个其实赋值给了下划线,虽然后面你可以通过下划线来取到值,但是强烈建议你不要这么做,这违反了约定。for i, _ in [(1, 2), (3, 4)]: print(i)
- 双下划线开头和结尾的方法,是魔术方法。
比如常见的
__int__
、__dict__
、__dir__
、__doc__
、__eq__
等等。 - 作为变量名中间的一部分。
相比驼峰命名,这叫做蛇形命名,比如
user_name
。 - 作为数字中间的一部分,更易读。
10_000_000 # 10000000 1_280_500_000 == 1280500000 # True
python中以下划线开头的变量名的含义
_xx
:前面单个下划线,私有化属性或方法,变量不能被外部直接调用。__xx
:前面两条下划线,私有化属性或方法,无法在外部直接访问,只允许类本身调用。__xx__
:前后两条下划线,系统定义名字,对 Python 来说有特殊用途。xx_
:后面单条下划线,用于避免与 Python 关键词的冲突。
Python-的类的下划线命名有什么不同
首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import *
导入时,这部分变量和函数不会被导入。不过值得注意的是,如果使用 import a_module
这样导入模块,仍然可以用 a_module._some_var
这样的形式访问到这样的对象。
在 Python 的官方推荐的代码样式中,还有一种单下划线结尾的样式,这在解析时并没有特别的含义,但通常用于和 Python 关键词区分开来,比如如果我们需要一个变量叫做 class
,但 class
是 Python 的关键词,就可以以单下划线结尾写作 class_
。
双下划线开头的命名形式在 Python 的类成员中使用表示名字改编(Name Mangling),即如果有一个 Test
类里有一成员 __x
,那么 dir(Test)
时会看到 _Test__x
而非 __x
。这是为了避免该成员的名称与子类中的名称冲突。但要注意这要求该名称末尾没有下划线。
双下划线开头双下划线结尾的是一些 Python 的“魔术”对象,如类成员的 __init__
、__del__
、__add__
、__getitem__
等,以及全局的 __file__
、__name__
等。Python 官方推荐永远不要将这样的命名方式应用于自己的变量或函数,而是按照文档说明来使用。
另外单下划线开头还有一种一般不会用到的情况在于使用一个 C 编写的扩展库有时会用下划线开头命名,然后使用一个去掉下划线的 Python 模块进行包装。如 struct
这个模块实际上是 C 模块 _struct
的一个 Python 包装。
更多关于命名的内容可以参考 PEP 8 《代码风格指南》的 Name Conventions 一节:
需要说明的是,由于这份文档看起来经过多次修改,双下划线开头的用法似乎曾经如 @makestory 所说,建议为类的私有成员,至少啄木鸟社区的 PEP 8 译文是这样写的,但 PEP 8 当前的官方版本中并没有体现。