这篇文章给大家介绍python中单下划线_,具体内容如下所示:
前言
我们在阅读源码的时候经常会看到各种单下划线_的使用,所以今天特地做一个总结,而且其实很多(不是所有)关于下划线的使用都是一些约定俗成的惯例,而不是真正对python解释器有影响。
0x1存储上一条语句的执行结果
在python的解释器中,_是上一条语句的执行结果,最早是CPython施行,到现在其他类型的解释器也在使用
0x02作为一个无关紧要的变量
例如下面这个例子:
for _ in range(10): print 'hello world!'
上面的语句执行结果是在屏幕上打印十行hello world,我们并不需要0-9这些数字,所以没必要给他一个变量名(虽然_也是一个变量名)。再来看一段sqlmap中的源码:
if not any(_ in sys.argv for _ in ("--version", "--api")): _ = BANNER if not getattr(LOGGER_HANDLER, "is_tty", False) or "--disable-coloring" in sys.argv: _ = clearColors(_) elif IS_WIN: coloramainit() dataToStdout(_, forceOutput=True)
可以看到这里也多次使用到了_,这里的下划线就是作为一个无关紧要的变量,只是当前使用一下,后面都不会再用了。这也是一个习惯的用法而已
0x03国际化
也许你也曾看到”_“会被作为一个函数来使用。这种情况下,它通常用于实现国际化和本地化字符串之间翻译查找的函数名称,这似乎源自并遵循相应的C约定。例如,在Django文档“转换”章节中,你将能看到如下代码:
from django.utils.translation import ugettext as _ from django.http import HttpResponse def my_view(request): output = _("Welcome to my site.") return HttpResponse(output)
国际化我也不是太懂它的具体用法,毕竟还没用到过,上面的内容来自我查阅的一些资料。
0x04变量前的下划线
在学习模块以及类时经常会遇到单下划线开头的变量,在python类编写这一部分,很多人都把这种以单下划线开头的变量比作c++中的protected类型变量,其实这也是一种规范吧,我们知道在c++中的protected类型的变量是不能在类外部被访问的,但是在python中是可以的,例如以下代码:
class Test: def _test(self): print 'I am test' t = Test() t._test() #I am test
所以在类编写时,单下划线的变量是一种程序员之间美丽的约定——只要是这种变量就不要随便在类外部去访问它!!!
但是如果我们在导入模块时来看这个单下划线开头的变量,那就不一样了,在这里这种特殊名字的变量就变成了类似一种某个模块的“私有”变量,因为我们在使用from 模块名 import *语句导入模块时,这些单下划线开头的变量默认是不会被导入的,所以实际上这个单下划线对python的解释器有了影响。
0x05双下划线开头的变量__test
这种形式的变量出现在类中,我们通常称它为私有变量,因为在类的外部确实不能简单的通过名字来访问这个变量,例如:
class Test: def __test(self): print 'I am test' t = Test() t.__test() #Traceback (most recent call last): #File "E:/python/python_test/under.py", line 10, in <module> # t.__test() #AttributeError: Test instance has no attribute '__test'
根据报错信息可以看到在这个实例上找不到我们刚刚定义的__test这个函数,确实很像是c++中的私有变量,但是python的做法可能更加有意思,它只是给我们的变量改了个名字而已。我们换个名字访问一下:
class Test: def __test(self): print 'I am test' t = Test() t._Test__test() #I am test
0x06双下划线开头双下划线结尾
类似于__init__这类的变量,想必大家已经接触了很多了,这些事python的内建变量(builtin),是python开发者帮我们定制好了的,我们也可以重写他们。
总结
以上所述是小编给大家介绍的python中单下划线_的常见用法总结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]