python 中各种下划线的神操作:_、_xx、xx_、__xx__、_ _xx、_classname_ _xx
文章目录
通常情况下,python中定义一些变量或者方法的时候,会使用到下划线。这些下划线只是简单的一种编码规约么?一开始仅认为是编程风格的规约,后来了解到这些下划线都是很讲究的。什么情况下该使用哪种下划线,不同的下划线有什么意义,等等。接下来就介绍一下以下划线命名的各种变量正确使用姿势。
1、只有一个下划线(_)
①先来看一个例子:
通过上面的例子,我们不难发现,当我输入一个下划线时,会有返回值。
其实在python解析器里,单个下划线(_)本身就是有值的。这是因为它会指向你最后一次执行的表达式,所以当我前面已经有过表达式的计算了,后面再输入下划线时会返回最近一次表达式的值。这在我们使用python交互的时候会常常用到。
②可以使用单个下划线来格式化变量的值,比如下面的例子:
通过这样的方式定义变量,增加代码的可读性,而且python解析器也知道我们在做什么,解析的时候并不会出现错误。
③此外,单个下划线还可以使用在循环语句中,比如:
2、单个下划线开头的(_xx)
以单个下划线开头命名的变量或者方法,说明是仅在本模块内部使用。
比如下面的例子:
def my_func():
print("my_func")
def _my_func():
print("_my_func")
接着创建一个模块test2,引用test1模块,执行两个方法:
from test1 import *
my_func()
_my_fun()
结果如下:
不带下划线的my_func() 方法能被调用,而带下划线的已经报错了,未定义,说明它只能被test1模块内部使用。
3、单个下划线结尾的(xx_)
作为一个开发者,我们都知道python中有很多关键字,比如def、class、pass等,这些关键字都是有特殊意义的,所以我们在定义变量或者方法的时候要避免使用关键字(其他编程语言也是一样的)。但如果非要使用关键字来定义变量,为了区分关键字本身的意义,我们可以在它们的后面加上一个下划线。比如下面的例子:
def_ = 23;
def print_func():
print(def_)
print_func()
输出结果为:
但不建议这样命名。避免使用关键字定义变量名,有那么多名称可以使用,何必使用关键字找麻烦呢。
4、两个下划线开头和结尾的 “_ _ xx _ _”
这种方式是最常见的了,python中很多内置的方法都是这样定义的。
对于这些python内置好的方法,叫它们为“魔法函数”,我们可以直接拿来使用。所以自己在定义函数的时候,不建议使用这种类似的两个下划线开头和结尾的方法命名。
5、两个下划线开头的命名 _ _xx
这种方式更多的是用在类的继承上。通过两个下划线开头命名的成员变量,可以防止被子类重写。
比如下面的例子:
class Person():
def __init__(self):
self.name="xiaoXianNu"
self.__age=18
# 实例化Person
handsome=Person()
print(handsome.name)
print(handsome.__age)
输出结果为:
通过输出结果可以看到,当实例化Person类的时候,成员变量name可以正常访问,但是 _ _age就不能访问了。
打印观察对象的属性:
输出结果不难发现,对象的属性name没有变,而 _ _age已经变成了 _Person__age,变成了Person类私有的属性。
接下来再写一个Son类,来继承Person类:
class Person():
def __init__(self):
self.name="xiaoXianNu"
self.__age=26
class Son(Person):
def __init__(self):
super().__init__()
self.name="I am your son"
self.__age=3
son=Son()
print(son.name)
print(son.__age)
输出结果为:
通过输出的结果可以发现,子类可以重写父类的name属性,但是不能重写_ _age属性。
打印观察Son对象的属性:
可以发现son对象里面的 _ _age 实际上已经变成了 _Son _ _age,变成son对象的私有属性了。
所以要想真正得到重写的age值,可以使用son对象的属性:
6、一个下划线+类名+两个下划线开头的命名(_classname _ _xx)
类似于上面的5,可以使用这种方式给变量命名:_Person _ _name="nvwang" 。 可以这样使用:_Person__name="nvWang"
class Person:
def print_name(self):
return __name
nvWang=Person()
print(nvWang.print_name())
上面????就是关于Python中下划线的使用方式,下面????是一个简单的总结,希望对您有所帮助????
上一篇: 总结阿里专家mysql讲解笔记
下一篇: two pointers