文档章节

Python中下划线的主要作用

 陈小超123
发布于 2015/02/21 21:18
字数 651
阅读 8
收藏 0

在Python中下划线只要有4个用处,分别是:

  1. 丢弃不必要的变量名

  2. 重命名另一个模块中的函数

  3. 使一个变量变成私有变量

  4. 保护父类中得方法不会被重写

一下是这4类用处的具体代码案列。

1.丢弃不必要的变量名

  如果我们需要简单地重复某个步骤,比如像下面这样

for i in range(5):
     # do something
     pass

  上面这段代码里面的变量i没有实际意义,我们就可以用"_"代替。

  再比如舍弃从数据库中查询出的不必要的字段

for field1, field2, _, field3 in cur.fetchall():
    # do something
    pass

当遇到一个变量你必须要定义,但是这个变量又没有实际用处的时候,都应该用"_"给此变量命名,表示这是一个被丢弃的变量,可以增加代码的可维护性。

2.重命名另一模块中得函数

假设module_a.py中有一个say_hello函数

def say_hello():
    print "hello"

在另外一个文件foo.py中我们可以这样写来调用say_hello函数

from module_a import say_hello as _
_()

这种严重破坏可读性,所有并不提倡。

这一点其实和上面一点本质上是一样的,都是把一个对象命名为_,所以如果这两种写法结合使用的话,_的含义就是以最后一个命名为准。

3.使一个变量变为私有变量

这里的_和Java里的private有一样的功能,如果一个变量或函数以__(两个_)开头,则表示这个变量或函数只能在此类或此模块中被访问。

class Foo():
    aaa = 5
    __bbb = 6

foo = Foo()
print foo.aaa
print foo.__bbb

5
Traceback (most recent call last):
  File "/Users/xxx/PycharmProjects/untitled/b.py", line 10, in <module>
    print foo.__bbb
AttributeError: Foo instance has no attribute '__bbb'
Process finished with exit code 1

4.保护父类中得方法不被重写

class A():
    def __say_hello(self):
        print "hello from A"

class B(A):
    def __say_hello(self):
        print "hello from B"

a = A()
b = B()
print dir(a), dir(b)
print b._A__say_hello(), b._B__say_hello()


/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/xxx/PycharmProjects/untitled/b.py
['_A__say_hello', '__doc__', '__module__'] ['_A__say_hello', '_B__say_hello', '__doc__', '__module__']
hello from A
None hello from B
None
Process finished with exit code 0

从上面的例子中可以看出子类B没有重写父类A中的__say_hello()方法是因为类中以__开头的方法会被Python自动替换为_[class_name][method_name]的形式,在外部不能用方法名直接调用这些方法,相当于类中的私有方法。


© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 3
码字总数 1170
作品 0
浦东
程序员
python有趣用法汇总(持续更新)

使用python过程中经常会不经意间遇到非常有趣的用法,于是特意搜集了一些 有趣的用法 1.for-else用法 循环正常结束则执行else语句。一般用于循环找符合条件的元素,如果找到则调出循环,不会...

p柯西
06/05
0
0
Python中的类、对象、继承

类 Python中,类的命名使用帕斯卡命名方式,即首字母大写。 Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): 省略父类名表示该类直接继承自,类的实例化如下: class Pers...

雪飞鸿
2016/11/03
0
0
Python核心编程(第二版)学习笔记02 【第3章 Python基础】

Python核心编程(第二版)学习笔记02 【第3章 Python基础】 2009-4-16 20:45 Tony 1 python语句基本规则和特殊字符: 反斜杠 继续上一行 分号 ; 将两个语句连接在一行中 冒号 : 将代码块的头...

Free Man
2009/04/16
0
0
如何利用Python实现权限设置?有些人只怕连这个操作都没想到过!

一、私有化的实现 在Python中想定义一个类是比较简单的,比如要定义一个Person类,如下代码即可: 当然我们也可以给类添加相应的属性,比如Person的姓名,年龄,性别等,并且在new一个Perso...

Python新世界
07/26
0
0
Python 代码风格 和 PEP8

Python 代码风格 和 PEP8 Python 的代码风格由 PEP 8 描述。这个文档描述了 Python 编程风格的方方面面。在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格。...

2shou2shou
2013/04/22
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day58-20180816-流利阅读笔记-待学习

苹果市值破万亿,iPhone 会涨价吗? Lala 2018-08-16 1.今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界。”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果...

aibinxiao
30分钟前
4
0
[雪峰磁针石博客]python3快速入门教程1 turtle绘图-2函数

菲波那契序列: >>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1>>> while b < 10:... print(b)... a, b = b, a+b...112......

python测试开发人工智能安全
今天
0
0
java环境变量配置最正确的方式

原贴:https://blog.csdn.net/qq_40007997/article/details/79784711,十分详细,亲测有效

kitty1116
今天
0
0
49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
2
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部