文档章节

Python中下划线的主要作用

 陈小超123
发布于 2015/02/21 21:18
字数 651
阅读 8
收藏 0
点赞 0
评论 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
博文 2
码字总数 1170
作品 0
浦东
程序员
python有趣用法汇总(持续更新)

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

p柯西 ⋅ 06/05 ⋅ 0

命令行运行Python脚本时传入参数的三种方式

三种常用的方式 如果在运行python脚本时需要传入一些参数,例如与,可以使用如下三种方式。 python script.py 0,1,2 10 python script.py -gpus=0,1,2 --batch-size=10 python script.py -g...

yzy121403725 ⋅ 06/05 ⋅ 0

Python在人工智能中起什么作用?学习python

  我们经常听到“Python”与“人工智能”这两个词,也很容易混淆这两个词,那么Python和人工智能有什么关系呢?   首先我们先来说说人工智能   人工智能是计算机科学的一个分支,它企图...

老男孩Linux培训 ⋅ 05/31 ⋅ 0

1. Python3源码—内建对象

1.1. Python内的对象 Python中的类和实例都是通过Python内的对象来实现的。Python中已经预先定义了一些类型对象。这些内建类型对象通过实例化,可以创建内建类型对象的实例对象。 在Python中...

whj0709 ⋅ 06/06 ⋅ 0

Python函数式编程中map()、reduce()和filter()函数的用法

Python中、和三个函数均是应用于序列的内置函数,分别对序列进行遍历、递归计算以及过滤操作。这三个内置函数在实际使用过程中常常和联合使用,我们首先介绍下lambda函数。1、lambda函数 la...

损失函数 ⋅ 05/24 ⋅ 0

程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2 ⋅ 05/23 ⋅ 0

最新阿里巴巴面试题(附带面试标准答案)

在上一节中,我们已经介绍了关于阿里巴巴的任职要求,这节我就详细的介绍一下关于阿里巴巴的面试题(涉及到标准代码部分不予以出现,如果想要可以加群:725479218,里面可以进行技术分享、技术...

柯西带你学编程 ⋅ 06/02 ⋅ 0

你想要的Python面试都在这里了【315+道题】

写在前面 近日恰逢学生临近毕业,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分【临近毕业每天课前用40-60分钟对之前内容回顾、提问和补充,专挑班里不爱说话就的...

p柯西 ⋅ 06/12 ⋅ 0

Python基础面试题80问 Python自动化开发

为什么学习Python? 2. 通过什么途径学习的Python? 3. Python和Java、PHP、C、C#、C++等其他语言的对比? 4. 简述解释型和编译型编程语言? 5. Python解释器种类以及特点? 6. 位和字节的关...

zhouzhou2018 ⋅ 05/24 ⋅ 0

python2.x和python3.x的区别

Python的3.0版本,常被称为Python3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python3.0在设计的时候没有考虑向下相容。许多针对早期Python版本...

leejia1989 ⋅ 05/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 18分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 22分钟前 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 28分钟前 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 28分钟前 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 29分钟前 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 55分钟前 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

Java序列化和反序列化

1、什么是序列化和反序列化 序列化:把对象转换为字节序列的过程。 反序列化:把字节序列恢复成对象的过程。 2、被序列化的类需要实现serializable接口,只是为了标注该对象是可以被序列化的...

IT-Mamba ⋅ 今天 ⋅ 0

流式构建原理

流式构建需要达到分钟级的数据更新频率,Kylin采用类似于Spark Streaming的做法,每隔数分钟进行一次微构建。这边的构建需要考虑到一个延迟因素,分布式网络存在延迟等因素,该时间段的数据有...

无精疯 ⋅ 今天 ⋅ 0

在maven项目工程编写solr代码,需要的依赖

solrJ <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.6.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents<......

爱运动的小乌龟 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部