Python中的下划线

转载请标明出处(http://blog.csdn.net/lis_12/article/details/52693115)

1.单下划线

1)解释器中

_符号指交互解释器中最后一次执行语句的结果。

2)名称

_也可用作被丢弃的名称,如for i in range(30),但是i用不到,可以舍弃i,用_代替似的代码更加直观。

for _ in range(30):dosomething()

2.以单下划线为前缀的变量名

1)正常使用

以“_”做前缀的变量是私有的。当外部python文件使用from module import *的时候,以”_”开头的变量、函数不会被导入。但是可以利用import module module._var 来访问变量。

双下划线开头的变量或者函数也是如此哦!

2)类

以_开头的变量或者函数视为保护成员,按理说只有类内部和子类可以访问,外部不该访问,但是可以访问

3.双下划线前缀的变量名

1)正常使用

以双下划线做前缀的变量(特别是方法名)对解释器来说是有特定含义的。解释器将之视为私有成员,在使用from module import * 导入模块的时候,”__“开头的变量和函数不会被导入,但是可以利用module.__var的方式来访问。

2)类

在类中,以双下划线做前缀的变量被视为私有成员,这些变量只有类的内部才能访问到,子类和外部不能访问。但是可以使用非常手段访问(以_classname__var就能访问到)。

Python会改写以双下划线开头的变量名称,以免与子类中定义的名称产生冲突。任何以__spam这种形式(至少以两个下划线做开头,绝大部分都还有一个下划线做结尾)的标识符,都会被替换为_classname__spam,其中classname是当前类名,并带上一个下划线做前缀。

看下面这个例子:

>>> class A(object):

… def _internal_use(self):

… pass

… def __method_name(self):

… pass

>>> dir(A())

[‘_A__method_name’,…,’_internal_use’]

_internal_use没有变化,但__method_name被改写成了_ClassName__method_name。现在创建一个A的子类B,就不会轻易的覆盖掉A中的__method_name了:

>>> classB(A):

… def __method_name(self):

… pass

>>> dir(B())

[‘_A__method_name’,’_B__method_name’,…,’_internal_use’]

这种特定的行为差不多等价于Java中的final方法和C++中的正常方法(非虚方法),可以理解为最终的方法,不会被再次修改

前后都带有双下划线的变量(例如__init__)

Python系统名称,一般只有在重写类中的方法才会使用这种命名。

4.测试code

class Foo():def __init__():...def public_method():print 'This is public method'def __fullprivate_method():print 'This is private method'def _halfprivate_method():print 'This is protect method'f = Foo()f.public_method() # OKf.__fullprivate_method() # Error occur 私有方法,不能访问f._halfprivate_method() # OK、f._Foo__fullprivate()_method() # OK 私有方法会被转化为_类名字+方法名,这种形式则可以访问到
test.py
_a = 1
b = 2
__c = 3
def _f1():print "_f1"def __f2():print '__f2'test_use.py
from test import *  #不会导入带_  __
import test   #但是利用module._a 可以访问if __name__ == '__main__':#主程序'''如果模块是被导入的 __name__为文件名字,如果是直接执行的,__name__ 为__main__'''try:_f1()except:print "f1 exception"   # exceptiontry:__f2()except:print "f2 exception"   #exceptiontry:print _aexcept:print "a exception"    #exceptiontry:print bexcept:print "f1 exception"    #okprint test._a  #okprint test.__c #oktest._f1()     #oktest.__f2()    #ok

1 Python中 _的作用相关推荐

  1. python 中/ 与 //的作用、用法

    python 中/ 与 //的作用.用法 原创蓝莓·山药 最后发布于2019-06-21 09:27:54 阅读数 3591  收藏 展开 python语法中, / 是除法,例如:2/3 = 0.66 ...

  2. python列表迭代器_关于Python中迭代器的作用

    迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...

  3. python中main的作用_浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  4. python迭代器好处_关于Python中迭代器的作用

    迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...

  5. python 中缩进的作用_缩进在Python中的作用有哪些?Python缩进案例分享

    缩进通常是指在文档中缩进单词,空格或行以遵循文档的样式规则,或者可以用来解释编写文档或代码时应使用的距离或应使用的空格.不过缩进在Python中的作用有哪些?在Python中缩进是最独特的功能之一,可 ...

  6. python中items的作用_什么是python items函数?怎么使用它?

    这篇文章我们来学习一下关于python字典之中的python items函数的相关知识,items函数是什么意思,这个函数有什么作用都将会在接下来的文章之中得到解答. 描述 Python 字典(Dic ...

  7. python中print()的作用是什么_在python中最常见的:print的真正用法

    一.print()函数概述 print() 方法用于打印输出,是python中最常见的一个函数. 该函数的语法如下: print(*objects, sep=' ', end='\n', file=s ...

  8. python中else的作用_享学课堂谈python中else的用途

    今天我能聊聊python中的else,大家都知道 Python 中else的基本用法是在条件控制语句中的 if...elif...else...,但是else 还有两个其它的用途,一是用于循环的结尾, ...

  9. python中break的作用_详解Python中break语句的用法

    在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中断退出. break语句可以在while ...

最新文章

  1. 小型工作室创业项目_为什么新开发人员应该在小型创业公司工作
  2. php 数组格式的字符串转为数组_php将字符串转换为数组实例讲解
  3. java中equals函数所在的类,重写Java中的equals方法介绍
  4. html 可换行属性,html里title属性换行的方法
  5. [jquery] 图片热区随图片大小自由缩放
  6. 数字图像处理实验之Matlab对图像的基本处理
  7. vue中的浏览量_vue项目中使用百度统计
  8. “泰迪杯”挑战赛 - 基于非侵入式负荷检测与分解的电力数据挖掘(附详细数据及代码)
  9. git 团队协作正确操作流程
  10. 【前端领域】3D旋转超美相册(HTML+CSS)
  11. tensorflow中squeeze与expand_dims
  12. burntest Linux参数,限拷机软件IntelBurnTest 2.0
  13. PDR (Pedestrian Dead Reckoning)行人航位推算基本原理及实现
  14. 【机器学习】Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting...
  15. iOS - mac环境Jenkins自动化打包并上传蒲公英分发从0到1详细搭建过程,自我的实践记录
  16. 根据域名反向查询ip地址服务器
  17. C语言练习题~n的阶乘
  18. uniapp动态显隐导航栏图标
  19. 你的Win10右键菜单还有一大堆用不上的选项?看完还你最简洁的右键菜单!!!
  20. Xcode无证书真机调试方法

热门文章

  1. C#学习记录(32)windows应用程序基础之TextBox控件
  2. spring boot跨境电商系统毕业设计源码211003
  3. 中文版orgin图像数字化工具_Origin数字化(Digitize)插件介绍(提取图片或扫描格式图形数据点)...
  4. 超链接target属性和取值和作用(CSS第三弹)
  5. Reactor与Proactor的区别
  6. 联想2015财年净亏1.28亿美元
  7. NYOJ疯牛【二分】
  8. css3实现扁平化风格APP应用图标时钟动画
  9. oracle least方法,PLSQL LEAST用法及代码示例
  10. 安阳工学院计算机二级成绩查询,安阳工学院教务管理系统入口http://jwc.ayit.edu.cn/...