for _ in list中的下划线_只是一个临时的循环变量, 因为_是合法的变量名

for _ in [1, 2, 3]:print(_)

li = [[0, 1] for _ in range(3)]

tu1= ([0, 1] for _ in range(3)) #()返回生成器, 而不是列表

tu2 = list([0, 1] for _ in range(3))print(li)print(tu1)print(tu2)'''输出结果:

[[0, 1], [0, 1], [0, 1]]

at 0x000000000214DF68>

[[0, 1], [0, 1], [0, 1]]'''

下面将详细的讨论以下Python中下划线_的使用

一、 单个下划线直接做变量名(_)

主要有三种情况:

1. 解释器中

_符号是指交互解释器中最后一次执行语句的返回结果。这种用法最初出现在CPython解释器中,其他解释器后来也都跟进了。

2. 作为名称使用

这个跟上面有点类似。_用作被丢弃的名称。按照惯例,这样做可以让阅读你代码的人知道,这是个不会被使用的特定名称。举个例子,你可能无所谓一个循环计数的值:

n = 42

for _ inrange(n):

do_something()

3.国际化

_还可以被用作函数名。这种情况,单下划线经常被用作国际化和本地化字符串翻译查询的函数名。这种惯例好像起源于C语言。举个例子,在 Django documentation for translation 中你可能会看到:

from django.utils.translation importugettext as _from django.http importHttpResponsedefmy_view(request):

output= _("Welcome to my site.")return HttpResponse(output)

第二种和第三种用法会引起冲突,所以在任意代码块中,如果使用了_作国际化翻译查询函数,就应该避免再用作被丢弃的变量名。

二、 单下划线前缀的名称(例如_shahriar)

以单下划线做前缀的名称指定了这个名称是“私有的”。在有些导入import * 的场景中,下一个使用你代码的人(或者你本人)会明白这个名称仅内部使用。Python documentation里面写道:

a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice.

之所以说在在 有些 import * 的场景,是因为导入时解释器确实对单下划线开头的名称做了处理。如果你这么写from import *,任何以单下划线开头的名称都不会被导入,除非模块/包的__all__列表明确包含了这些名称。更多相关信息见““Importing * in Python”。

三、双下划线前缀的名称(例如__shahriar)

以双下划线做前缀的名称(特别是方法名)并不是一种惯例;它对解释器有特定含义。Python会改写这些名称,以免与子类中定义的名称产生冲突。Python documentation中提到,任何__spam这种形式(至少以两个下划线做开头,绝大部分都还有一个下划线做结尾)的标识符,都会文本上被替换为_classname__spam,其中classname是当前类名,并带上一个下划线做前缀。

classA(object):def _internal_use(self):  #单下划线

pass

def __method_name(self):  #双下划线

pass

print(dir(A))'''输出结果:

['_A__method_name', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_internal_use']'''

正如所料,_internal_use没有变化,但__method_name被改写成了_ClassName__method_name。现在创建一个A的子类B(这可不是个好名字),就不会轻易的覆盖掉A中的__method_name了:

classA(object):def_internal_use(self):pass

def __method_name(self):pass

classB(A):def __method_name(self):pass

print(dir(B))'''输出结果:

['_A__method_name', '_B__method_name', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_internal_use']'''

四、名称前后的双下划线(如:__init__)

这种用法表示Python中特殊的方法名。其实,这只是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。例如,当定义一个类时,你经常会覆写“__init__”方法。虽然也可以编写自己的特殊方法名,但不要这样做。

classC:def __init__(self,name):

self.name=namedef __showname(self):pass

print(dir(C))'''['_C__showname', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']'''

python中的for in循环有什么意思_for _ in xxx中的下划线_是什么意思?相关推荐

  1. python中的下划线_讲解

    python中,下划线 "_""_"" \_" 不管是单独作为变量名或者作为变量名的前缀或者后缀,是有特殊含义的,下面简要的来总结一下. 1 ...

  2. python前后双下划线_【Python】单下划线与双下划线的区别

    Python 用下划线作为前缀和后缀指定特殊变量和定义方法,主要有如下四种形式: l 单下划线( _ ) l 名称前的单下划线(如: _name ) l 名称前的双下划线(如: __name ) l ...

  3. Python中单个下划线“ _”变量的用途是什么?

    这段代码中_ after for的含义是什么? if tbh.bag:n = 0for _ in tbh.bag.atom_set():n += 1 #1楼 下划线_在Python中被视为" ...

  4. python中init方法的两个下划线_为什么Python中有各种各样的“_”下划线?分别有什么用?...

    刚开始学Python的你一定很疑惑,为什么Python里会出现各种各样的下划线 "_",而且位置都不相同,有时候在名称后面,有时候在前面,有时候还会在数字中间......这些下划线 ...

  5. python中的符号下划线_详解Python中下划线的使用方法

    编程派微信号:codingpy 这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线 _ 的不同用法绝大部分(不全是)都是一种惯例约定. 单个下划线(_) 主要有三种情况: ...

  6. Python中带下划线_的变量和函数命名的用法

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  7. Python中单个下划线“_”变量的目的是什么?

    在Python中,下划线_被视为" 我不关心 "或" 丢失 "变量 python解释器将最后一个表达式值存储到名为的特殊变量中_. >>> 1 ...

  8. python中五种下划线 _

    python中五种下划线 "_" 单前导下划线:_var 单末尾下划线:var_ 双前导下划线:__var 双前导和末尾下划线:var 单下划线:_ 在文章结尾处,你可以找到一个简 ...

  9. Python 单下划线(“_“)与双下划线(“__“)以及以双下划线开头和结尾的的区别

    由于python 中没有java 语言中的private ,public, protected 之类的,就引用了下划线. 单下划线的作用: 以单下划线("_")开头的模块变量或者函 ...

最新文章

  1. 0宽字符加密_前端AES加密方式分析,及其python实现
  2. 类文件结构-method-init和类文件结构-method-main
  3. linux查看当前会话文件夹,Linux 记录会话过程的命令
  4. java 的分类_java的基本类型(转)
  5. vxworks的default boot line说明
  6. 多重背包的二进制优化(ybtoj-宝物筛选)
  7. 以色列:新发明大幅提高太阳能发电效率
  8. SensorKernel层框架分析
  9. 队列、函数-多线程 线程队列的实现-by小雨
  10. 虚拟化软件Xen的简单应用
  11. Light OJ 1316 A Wedding Party 最短路+状态压缩DP
  12. vmware提示虚拟机似乎正在使用中
  13. flash如何同时访问本地文件系统和网络文件
  14. taxi计费器c语言程序,出租车计价器VHDL程序与仿真
  15. Matlab之双坐标轴绘制plotyy
  16. web前端页面优化详解
  17. 解决CSDN上传资源出现报错:“该资源已存在,请重新上传”
  18. expdp异地备份 (expdp导出数据到其他服务器)
  19. 弹指流连间,在梦中轻拾爱的碎片
  20. 关于Pytorch中dim使用的一点记录

热门文章

  1. 【Hive】 解决 com.ctc.wstx.exc.WstxParsingException: String ‘--‘ not allowed in comment (missing ‘」‘?)
  2. 操作系统-虚拟内存、虚拟地址空间机制
  3. 世界上最经典25句话
  4. python爬虫实战——轻松学会电脑桌面壁纸爬取
  5. php yii框架路由,yii框架的路由在哪里看
  6. grpc-go源码剖析十三之pickFirst 平衡器 原理介绍
  7. 路易斯华盛顿大学计算机系,圣路易斯华盛顿大学ee
  8. 05创建laravel5.8前后台api项目--jwt前台后台账号分离
  9. TPC-H(二):22个SQL语句说明(基于TPC-H2.17.3版本)
  10. 用友UAP-studio启动项目时如何修改启动端口