python中单下划线_的常见用法总结


Posted in Python onJuly 10, 2018

这篇文章给大家介绍python中单下划线_,具体内容如下所示:

前言

我们在阅读源码的时候经常会看到各种单下划线_的使用,所以今天特地做一个总结,而且其实很多(不是所有)关于下划线的使用都是一些约定俗成的惯例,而不是真正对python解释器有影响。

0x1存储上一条语句的执行结果

在python的解释器中,_是上一条语句的执行结果,最早是CPython施行,到现在其他类型的解释器也在使用

python中单下划线_的常见用法总结

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中单下划线_的常见用法总结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python字符串替换示例
Apr 24 Python
使用python实现拉钩网上的FizzBuzzWhizz问题示例
May 05 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
Python xlwt模块使用代码实例
Jun 10 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 Python
浅谈dataframe中更改列属性的方法
Jul 10 #Python
对python sklearn one-hot编码详解
Jul 10 #Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 #Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 #Python
详解python中的装饰器
Jul 10 #Python
pandas值替换方法
Jul 10 #Python
Pandas 数据处理,数据清洗详解
Jul 10 #Python
You might like
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
JS 自定义带默认值的函数
2011/07/21 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
ES7之Async/await的使用详解
2019/03/28 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
Python制作动态字符图的实例
2019/01/27 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
解决Django no such table: django_session的问题
2020/04/07 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
大学生毕业自我鉴定范文
2013/09/19 职场文书
退休感言
2014/01/28 职场文书
中学自我评价
2014/01/31 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
525心理活动总结
2014/07/04 职场文书
村官个人总结范文
2015/03/03 职场文书
MySQL RC事务隔离的实现
2022/03/31 MySQL
nginx lua 操作 mysql
2022/05/15 Servers