今天在阅读程序的时候看到这么一行代码:

__all__ = ['S3DIS']

搜了搜将__all__的用法整理下来。

来源

  1. Python __all__变量用法
  2. 【Python】all 暴露接口

当我们向文件导入某个模块时,导入的是该模块中那些名称不以下划线(单下划线“_”或者双下划线“__”)开头的变量、函数和类。因此,如果我们不想模块文件中的某个成员被引入到其它文件中使用,可以在其名称前添加下划线。

# mytest.py
def a():print('aaaaa')
def b():print('bbbbb')
def _c():print('ccccc')# mytest2.py
from mytest import *
a()
b()
c()

运行mytest2.py,结果:

Traceback (most recent call last):File "/home/mytest2.py", line 6, in <module>c()
NameError: name 'c' is not defined
aaaaa
bbbbb

显然,mytest2.py 文件中无法使用未引入的c() 函数。
除此之外,还可以借助模块提供的__all__ 变量,该变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称。通过在模块文件中设置__all__变量,当其它文件以“from 模块名 import *”的形式导入该模块时,该文件中只能使用__all__ 列表中指定的成员。__all__也是对于模块公开接口的一种约定,比起下划线,__all__提供了暴露接口用的“白名单”。

# mytest.py
__all__ = ['a','b']  #这里不同def a():print('aaaaa')
def b():print('bbbbb')
def c():                  # 这里不同print('ccccc')# mytest2.py
from mytest import *
a()
b()
c()

运行mytest2.py,结果:

Traceback (most recent call last):File "/home/mytest2.py", line 6, in <module>c()
NameError: name 'c' is not defined
aaaaa
bbbbb

__all__中只包含了a()和b()两个函数,因此在用from mytest import *导入模块时c()函数是未被引入 的。

注意:

  1. __all__变量只在以from 模块名 import *形式导入模块时起作用,而以其他形式,如import 模块名、from 模块名 import 成员时都不起作用。
  2. 代码中当然是不提倡用 from xxx import * 的写法的,一般只用在临时代码如console调试中,这种时候如果没有定义__all__,会将模块中非下划线开头的所有成员都导入当前命名空间中,可能弄脏当前命名空间。
  3. __all__应该是list 类型的。
  4. 不应该动态生成__all__,比如使用列表解析式。
  5. __all__的位置:按照 PEP8 建议的风格,__all__应该写在所有 import 语句下面,和函数、常量等模块成员定义的上面。

python __all__用法相关推荐

  1. Python pandas用法

    Python pandas用法 无味之味关注 12019.01.10 15:43:25字数 2,877阅读 91,914 介绍 在Python中,pandas是基于NumPy数组构建的,使数据预处理. ...

  2. python goto 用法

    python goto 用法 pip install goto-statement from goto import with_goto @with_goto def range(start, sto ...

  3. Python SQLite 用法

    Python SQLite 用法 具体可以参考网址 代码: #导入 import sqlite3 #连接库,如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象. # test.db:数据路路 ...

  4. import的用法python_Python导入模块,Python import用法(超级详细)

    Python导入模块,Python import用法(超级详细) 使用 Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库.比如说,在前面章 ...

  5. python with用法

    @python with用法 python中with可以明显改进代码友好度,比如: [python] view plaincopyprint? with open('a.txt') as f: pri ...

  6. Python高级用法总结

    Python很棒,它有很多高级用法值得细细思索,学习使用.本文将根据日常使用,总结介绍Python的一组高级特性,包括:列表推导式.迭代器和生成器.装饰器. 列表推导(list comprehensi ...

  7. 数据库和python的结合_redis数据库及与python交互用法简单示例

    本文实例讲述了redis数据库及与python交互用法.分享给大家供大家参考,具体如下: redis数据操作 1.string类型:主要存储字符串 操作 命令 设置键值 set key value 设 ...

  8. python输出函数是什么_Python中打印函数使用概述,python,print,用法,总结

    输出的 print 函数总结: 1. 字符串和数值类型 可以直接输出 print(1) 1 print("Hello World") Hello World 2.变量 无论什么类型 ...

  9. Python break用法详解

    文章目录 Python break 用法 Python break 用法 我们知道,在执行 while 循环或者 for 循环时,只要循环条件满足,程序将会一直执行循环体,不停地转圈.但在某些场景,我 ...

最新文章

  1. JEECMS8——系列文档
  2. rock-paper-scissors
  3. bzoj3144: [Hnoi2013]切糕(最小割)
  4. 使用Mutex實現單一程式執行個體的注意事項(转)
  5. 数据分析-书籍整理(一)
  6. linux查看进程详细信息top,linux查看系统进程信息命令 px,top详解
  7. HTML 5 canvas 基本语法
  8. 让sourceSafe每天自动备份及修复(适用于vss6.0和vss2005)
  9. XSLT的处理模型(1)
  10. CryEngine3渲染引擎剖析
  11. 模拟电子中放大电路的基本分析方法
  12. BZOJ 3555: [Ctsc2014]企鹅QQ
  13. Oracle批量清空表数据
  14. ipa在线安装搭建_HBuilder如何打包ipa文件?如何获取苹果证书?
  15. 2020一级计算机考证
  16. 微信小程序实现录音及本地录音播放功能
  17. Java 实现 淘宝秒杀 聚划算 自动提醒 源码
  18. php接口类的使用,PHP面向对象开发之类中接口的应用(interface、implements)
  19. [考研] 中文自我介绍 | 英文自我介绍 | 英文问答
  20. centos mysql5.5 编译安装_CentOS7 源码安装 MySQL5.5

热门文章

  1. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 Training a GPT-2 language model
  2. python发微信提醒天气冷了注意保暖_秋天了,降温天气变冷注意保暖的微信早安问候语...
  3. 超好玩!分享 GitHub 推荐的 13 款万圣节开源游戏!
  4. 字体颜色编码 html
  5. VScode自动保存编译
  6. nodejs安装、npm安装
  7. This version of ChromeDriver only supports Chrome version ...
  8. a标签点击一次后,就不能再点击了,同时还把它的颜色变成灰色?用js实现
  9. pythonif elif_python为什么会存在if执行了依然会执行elif的情况?
  10. 【高并发编程】之高并发理论