热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python中下划线_Python中下划线_的作用

下划线_是很神奇的一个符号,在Python里有很多特殊作用。1.表示刚才输出的内容用下划线表示最近一次输出的内容,这个在很多教程问答中出现,

下划线 _是很神奇的一个符号,在Python里有很多特殊作用。

1. 表示刚才输出的内容

用下划线表示最近一次输出的内容,这个在很多教程问答中出现,请认真看下面这个:

ae3dd04ac6705b45f18fa7fef8bace23.png

使用 python3命令进入python的解释器状态:

第一行输入s='a,b,c,d'然后就回车第二行输入_,报错notdefined未定义,说明刚才什么也没输出(不是吗?)。

然后输入单个的s回车,输出了字符串'a,b,c,d',然后再执行s.split(',')用逗号分割成为列表,成功!

然后输入a=99,再换行输入_,得到的仍然是刚才输出的列表(不是字符串啦!)

再输入a,回车输出99,这也把'_'变成了99,然后+1就会累加上去。

后来我们又创建了列表c,并输出它,也就指定到了_,并且可以使用_[0:1]取得第一个元素,说明下划线不仅仅可以表示输出的字符串和数字,还可以是更复杂的东西。

注意:这种用法只能在命令行中使用,禁止在.py文件或者Notebook中使用。

2. “我不在乎这个东西”

下划线还可以当做毫无意义的占位符号,比如 for循环的格式是 forninrange(0,100):这里的 n有些时候根本没有用,但又不能省略,那么就可以用下划线鄙视它一下:

for_inrange(10):

print('哈')

这里只是大笑十声,那么如果用 n也毫无用处,但是下面这个情况就还是需要 n的:

forninrange(10):

print('第'+str(n+1)+'声大笑')

第1声大笑

第2声大笑

第3声大笑

第4声大笑

第5声大笑

第6声大笑

第7声大笑

第8声大笑

第9声大笑

第10声大笑

这个用法可以扩展到元组构成的列表:

li=[('a',99),('b',100)]

for_,vinli:

print(v)

99

100

输出 99和 100。如果变成 forv,_inli:就会输出 a和 b。如果变成 forvinli就会输出两个完整的元组 ('a',99)和 ('b',100)。

还有一些其他情况也可以用下划线表示占位:

a=(101,102,103,104,105)

x,_,z,_,_=a

print(x,z)

101103

直接创建 x和 z两个变量,输出 101和 103,我们不在乎其他的。下面是更厉害的占位:

a= (101,102,103,104,105)

x, *_, m = a

print(x, m)

101105

星号是乘法,在这里就把中间的几个都占位了,输出 101和 105。

3. _abc单下划线开头,表示私有不被导出

单个下划线开头的名称只能在当前文件使用,不能导出到其他文件调用。比如下面的 gongkai对象可以在被别的文件 import这个文件后调用,但 _siyou却不能被使用:

#a.py文件

classgongkai():

_hide=99

vis=100

def_hideMethod(self):

print('...')

defvisMethod(self):

print('>>',self._hide,self.vis)

class_siyou():

vv=88

#b.py文件

fromaimport*

print(gongkai)

c=gongkai()

print(c._hide,c.vis)

c.visMethod()

#print(_siyou)

把 a.py和 b.py放在一个文件,命令行进入这个文件夹,运行 python3 b.py会发现gongkai的都能正常显示, _hide的下划线根本没用,一样可以输出。但是整个 _siyou都不能使用了。

下划线开头的顶级名称会被 import禁用。但其他的下划线开头的名称作为私有,这就只是一种惯例而已。

但其实python根本不存在私有这个概念的,即使上面的__siyou也可以通过fromaimport__siyou正常导入,只是*星号会忽略它。如果你再a.py里面添加一行__all__=['_siyou']那么import*之后,_siyou可以用,gongkai却不可以用了。

4. abc_下划线结尾,只是避免和系统自带关键字重名

这也是一个惯例,比如不能 from=100因为 from是关键字,只能改为 from_=100(如果你非要坚持用from这个词的话)。

再比如下面这个 s类是对 str字符串的扩展,避免了 split命名重复:

classs(str):

defsplit_(self):

return100

aa=s('a,b,c')

print(aa.split_(),aa.split(','))

100['a','b','c']

输出 100和 ['a','b','c']。

5. __abc双下划线开头,表示碾压子类同样的名称

上面我们用 s(str)扩展了 str类,避免了 split方法混淆,但如果真的混淆了,那么该听谁的呢?如果在 classa里面使用了双下划线的名称开头,那么不管以后怎么扩展,都是它说了算,比如:

classA:

__v=100

v=200

defp(self):

print(self.__v,self.v)

classB(A):

__v=99

v=199

b=B()

b.p()

100199

输出 100和 199。 v被子类 B覆盖了,但 A把子类的 __v给碾压了。

6. __abc__双下划线开头又结尾,表示这是系统需要的功能

这样的名称一般不会用到,但也不要去修改。比如 __init__用来初始化类。

7. gettext的_是一个用于i18n/l18n的方法

i18n就是 Internationalization(i+18个字母+n组成)国际化; l就是 Localization本地化。如果你 importgettext那么就会有下划线这个方法,其实就是 gettext.gettext的缩写。

8. 1_000_000分割数字,相当于数字中的千分位逗号

a =1_000_000

a

1000000

a =1_0_0

a

100

1_000_000就是100万, 1_0_0就是100。

以上就是本文的全部内容,希望对大家的学习有所帮助。如果觉得文章不错,动手转发支持一下哦!

66cfae8d3a37fe1ee018a29bb5b282cb.png

66cfae8d3a37fe1ee018a29bb5b282cb.png

66cfae8d3a37fe1ee018a29bb5b282cb.png

感谢您的阅读!想了解更多有关技巧,请关注我的微信公众号“R语言和Python学堂”,同时也欢迎大家积极投稿,促进交流。

我的专栏:

简书:https://www.jianshu.com/u/981ba7d6b4a6



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
咪咪的小天地计_395
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有