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目录与文件名操作例子
Aug 28 Python
Python数据结构之单链表详解
Sep 12 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
对Python协程之异步同步的区别详解
Feb 19 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
详解用python计算阶乘的几种方法
Aug 14 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
python根据文本生成词云图代码实例
Nov 15 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
python实现简单的tcp 文件下载
Sep 16 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
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
详细介绍Python函数中的默认参数
2015/03/30 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Keras实现DenseNet结构操作
2020/07/06 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
保护环境倡议书范文
2014/05/13 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
2015年教研员工作总结
2015/05/26 职场文书
公司车队管理制度
2015/08/04 职场文书
医院消毒隔离制度
2015/08/05 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android