标签分类
技术文章
当前位置:主页 > 计算机编程 > python > python中单下划线的常见用法总结

python中单下划线的用法总结

  • 发布时间:
  • 作者:码农之家原创
  • 点击:108

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

这篇文章主要知识点是关于python中单下划线,python,下划线,python中单下划线的常见用法总结,关于python 下划线使用场景 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python+Spark2.0+Hadoop机器学习与大数据实战
  • 类型:Hadoop大小:109 MB格式:PDF出版:清华大学出版社作者:林大贵
立即下载

更多相关的学习资源可以参阅 程序设计电子书Python电子书、等栏目。

这篇文章给大家介绍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提供了多个图形开发界面的库,本文给大家介绍一下关于python 下划线使用场景。

  1. 前导单下划线_var

    pep 8, 约定,
    使用场景: 仅限内部使用, 比如只在类内部使用的函数,变量
    注意:通配符导入 :from module import *是不会到导入带单前导下划线的对象的

  2. 单末尾下划线 var_

    使用场景: 某个变量的最合适的名称已被关键字占用,而你还想用,可以附加一个下划线解决命名冲突
    比如: class_ ,id_

  3. 双前导下划线__var

    python解释器会重写属性名称,避免子类中的命名冲突,重写为: _classname__var. 简单的说,就像c++中的私有变量,对子类和外部是完全透明的,不可引用
    使用场景:一般某个对象很重要,不想被子类或外部直接引用

  4. 双前导和双末尾下划线 __var__

    python保留作为特殊用途,__init___, __call__等, 不建议在自己的代码中使用

  5. 单下划线 _

    使用场景: 标识某个临时或无关紧要的变量, 常在unpacking表达式中使用

    比如:age不重要

    name_age_id = ('醉陌', '20', '21315271927')
    name, _, id_ = name_age_id

相关推荐:

MySQL Connector/Python for Python 3.3_MySQL

【python教程】python GUI编程(Tkinter)

以上就是关于python 下划线使用场景的详细内容,更多请关注码农之家其它相关文章!

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到解决axios.interceptors.respon、 儿童python编程入门书籍推、 vue项目中使用md5加密以及、 等python文章进一步学习,感谢大家的阅读和支持。

上一篇:Python对微信好友进行数据分析实操详解

下一篇:python将bmp转换为jpg格式并删除原图的具体操作

展开 +

收起 -

学习笔记
网友NO.947375

Python中实例前单双下划线的区别

单下划线 在一个类中的方法或属性用单下划线开头就是告诉别的程序这个属性或方法是私有的。然而对于这个名字来说并没有什么特别的。 双下划线 任何__spam形式(至少两个下划线开头,至多一个下划线结尾)都是代替_classname__spam,其中classname是当前类的名字。This mangling is done without regard to the syntactic position of the identifier。所以它能用来定义私有类的实例和类变量,方法,在全局中的变量,甚至是实例中的变量。可以区别不同类的实例。 总结: __foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突。 _foo:一种约定,用来指定变量私有。程序员用来指定私有变量的一种方式。 __foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名。 在Python中没有其他形式的下划线了。 这种约定方式和类,变量,全局变量等没有区别。 以上就是Python中实例前单双下划线的区别的详细内容,更多请关注码农之家其它相关文章! ……

网友NO.641076

不知道这5种下划线的含义,你就不算真的会Python!

什么是 Python? Python 之父 Guido van Rossum 说:Python是一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法。 对于我来说,学习 Python 的首要原因是,Python 是一种可以优雅编程的语言。它能够简单自然地写出代码和实现我的想法。 另一个原因是我们可以将 Python 用在很多地方:人工智能、数据科学、Web 开发和机器学习等都可以使用 Python 来开发。 国庆期间后台有小伙伴留言问我:“Python变量和方法名称中单下划线和双下划线的含义是什么?”我想一些初学者或者经验尚浅的朋友一定也会有这个疑问,所以今天我就来跟大家聊聊Python中这个很重要的“下划线”! 单下划线和双下划线在Python变量和方法名称中都各有其含义。有一些含义仅仅是依照约定,被视作是对程序员的提示 - 而有一些含义是由Python解释器严格执行的。 那么,下面就为大家介绍一下Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类。 下面将讨论以下五种下划线模式和命名约定,以及它们如何影响Python程序的行为: 单前导下划线:_var 单末尾下划线:var_ 双前导下划线:__var 双前导和末尾下划线:__var__ 单下划线:_ 1、单前导下……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明