这篇文章说两个问题:

问一:下划线变量

单下划线开头的变量,Pyhthon规定为内部变量(私有变量),from M import * 时,这种变量并不会导入进来,例如:

foo.py

#foo.py

bar = 10

bar2 = 11

_bar = 20

__bar = 30

foo2.py

#foo2.py

from foo import *

if __name__ == '__main__':

print locals()

执行 python foo2.py,输出:

{'bar2': 11, 'bar': 10, '...省略'}

输入结果中并没有 _bar和__bar,因为它们都是以下划线开头的变量,所以没有导入进来,但是如果你非要把这些变量导入进来也是可以的,使用import时,明确导入具体的变量时就行了。如:

#foo2.py

from foo import *

from foo import _bar

from foo import __bar

if __name__ == '__main__':

print locals()

输出:

{'_bar': 20, 'bar2': 11, 'bar': 10, '__bar': 30, ‘...省略'}

单下划线结尾的变量:用于避免于Python关键字冲突的变量,如class_:

Tkinter.Toplevel(master, class_='ClassName')

如上所说的变量讲的是定义在模块中的变量,属于模块中的属性,如果这些变量定义在函数里面,那它和普通的变量没什么两样的,都是局部变量。此外,单下划线同样适用于函数。

双下划线开头的变量:它在模块中还是当作单下划线看待,但出现在类中作为类属性就不一样了,在运行时该类属性会被“混淆",不能直接访问,需要在该变量前加上下划线和类名才能访问。如:

class Foo(object):

boo = 40

_boo = 50

__boo = 60 # _Foo__boo

def __init__(self):

self.__booo = 70

def __test(self): #_Foo__test

print "__test"

if __name__ == '__main__':

print Foo.boo

print Foo._boo

print Foo._Foo__boo

foo = Foo()

print foo._Foo__booo

foo._Foo__test()

这样可以防止与父类或子类中同名的__xxx属性发生冲突。

开始和结尾都有的双下划线的变量:此类变量属于魔法对象,如:init,file,你永远不要自己也发明个出来。

问二:all

__all__对象是装有字符串的列表对象,他会覆盖 from import * 的默认行为:如

#foo.py

__all__ = ['bar', 'baz']

waz = 5

bar = 10

def baz(): return 'baz'

from foo import *

print bar

print baz

# 异常

print waz

在foo.py里面定义了__all__后,import * 就会按照 __all__定义的内容导入,所以这里 print waz就抛异常了,因为它不在 __all__里面。为外,你可以把下划线开头的变量的字符串形式加入到__all__中,这样 import * 也能看到这些变量。

有问题可以扫描二维码和我交流

关注公众号「Python之禅」,回复「1024」免费获取Python资源

python中bar是什么意思_Python中下划线的变量是什么个意思相关推荐

  1. python中class __str__怎么用_python中下划线的作用

    学习python的时候,我们经常碰到一些变量的变量名带单下划线/双下划线前缀或者后缀,然后会觉得这样的命名风格很奇怪.除了变量命名风格外,也会遇到下划线的表达式,也会让人摸不着头脑.今天我们就来看下, ...

  2. python中turtle要安装吗_Python中下划线的5种含义你都知道吗?

    黑客技术 点击右侧关注,了解黑客的世界! Linux编程 点击右侧关注,免费入门到精通! 程序员严选 甄选正品好物,程序员生活指南! 本文介绍了Python中单下划线和双下划线("dunde ...

  3. python定义函数以什么开头_python中下划线开头函数是什么

    python用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线 ...

  4. python中bar函数的用法_Python:如何在函数中使用progressbar

    我正在使用以下函数:def LAS2TXTGridClip(inFile,poly,MinPoints=1): sf = shapefile.Reader(poly) #open shpfile sr ...

  5. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  6. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  7. python中模块是什么意思_Python中的模块是什么?3分钟搞懂Python中的模块问题

    Python 中的模块是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,模块让你能够有逻辑地组织你的 Python 代码段.把相关的代码分配到一个模块里能 ...

  8. python中标识符的命名规则_python标识符的命名规则是什么

    在Python中,一切都是对象,包括常量数据类型,如整数数据类型(1,2,3...),字符串数据类型("ABC").想要使用这些对象,就要使用它的对象引用.赋值操作符,实际上是使得 ...

  9. python程序中长下划线怎么打_python中下划线怎么输入

    python中下划线使用键盘上的Shift+减号键即可打出,减号键位于0和加号键之间. 在Python中下划线还具有 private 和 protected 类似的访问权限作用,下面我们具体分析.Py ...

最新文章

  1. Flash数据的采集方法-搜房房价走势采集
  2. CodeForces - 557E(trie
  3. swagger文档转换为WebApiClient声明式代码
  4. mysql 用户密码md5_使用MD5编码实现数据库用户密码字段的加密
  5. Jquery Mobile 画面导航栏共用的实现方法
  6. 那些很厉害的人,是如何度过职场迷茫的?
  7. 素材路上|专注平面设计素材模板,可能会让你抛弃花瓣!
  8. pg安装部署linux_简简单单基于docker部署微服务网关
  9. [原] 内心深处唱的这首歌
  10. 106. 数据库增删改的封装
  11. 华为手机热点无法连接_为什么华为手机开热点别的手机连不上?
  12. 药用计算机题目,医用计算机基础_超星尔雅_题库及答案
  13. 医疗物联网的定义的业务场景
  14. 最早的支付网关(滴滴支付)和最新的聚合支付设计架构
  15. 今天第一次来这里开博,大家多多指教
  16. 塔式太阳能热发电系统的防雷设计
  17. layui数据表格重载与导出
  18. 光和颜料中的三原色,美术中的三原色
  19. Git 学会git,探索GitHub,掌握新知识 (二)
  20. 误删了efi分区,怎么样恢复,使电脑开机回到windows

热门文章

  1. 社交之后又是资讯,支付宝要用内容吸引流量
  2. 【python】python的二元表达式和三元表达式
  3. Spring AOP介绍
  4. U盘安装ubuntu server 10.4
  5. Amazon网站架构学习总结
  6. GAE 博客——B3log Solo 0.3.0 正式版发布了!
  7. The Double-Checked Locking is Broken Declaration
  8. 1、环境搭建、Helloworld
  9. 华为鸿蒙系统备用,就只有华为有备用系统?其实谷歌也准备了一个,不输鸿蒙系统!...
  10. ARMv8体系结构基础02:搭建实验环境