Python杂记——下划线总结

Python中的下划线可以分为单下划线"_ "和双下划线 “__”。与变量和函数名称有一下几种组合:

  • 在名称前面:_name和__name
  • 在名称后面: name_和name__
  • 前后都有: name 和 __ name __
  • 不和名称结合:_

在名称前面

单下划线

单下划线在名称前面只是约定俗成的使用方式,用来说明该变量或者函数只是内部使用。但这不是python解释器强制的,只是对代码使用者或者阅读者的提示。

需要注意的一点,如果函数,方法,类的名称使用单下划线开头,使用import *引入该模块的时候是不能够被引入的

双下划线

双下划线就厉害了。通过dir可以看到以双下划线开头的名字会被修改,前面添加了类的名称。
双下划线会使解释器修改名称,用来避免子类的命名冲突。它可以当做类里面的私有变量或者函数来使用。但并不是严格的私有方法,通过修改后的名称仍然可以访问。

class MyTest():
    def __init__(self):
        self.aa = 1
        self.__aa = 2

    def __ss(self):
        return self.aa


test = MyTest()

#test.__aa
print(dir(test))
print(test.__ss)
['_MyTest__aa', '_MyTest__ss', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa']
Traceback (most recent call last):
  File "test_.py", line 16, in <module>
    print(test.__ss)
AttributeError: 'MyTest' object has no attribute '__ss'

在名称后面

单下划线

单下划线在名字后面通常应用与避免与python中的关键字冲突。

def student(name, class_)

双下划线

这个和单下划线差不多,基本不会用到。

前后都有

双下划线

一般是系统定义的名称,或者用于操作符重载。单张自己定义最好不要使用这种风格的命名,避免与python产生冲突。

单独下划线

单下划线

一种情况是用来表示某个变量是临时的或者不需要关注的,比如忽略函数的某个返回值或者for循环中条件变量。

ret,- = get_result()
for _ in range(10):
	dosomething()

还有一个使用方法是获取最近表达式的结果。

> 3 + 2
> 5
> _
> 5

おすすめ

転載: blog.csdn.net/itlilyer/article/details/120930498