Python - __all__ 变量
import *
- 当我们向文件导入某个模块时,导入的是该模块中那些名称不以下划线(单下划线 _ 或者双下划线 __ )开头的变量、函数和类
- 因此,如果不想模块文件中的某个对象被引入到其它文件中使用,可以在其名称前添加下划线
- 下面就来讲下 import * 的栗子
demo.py
def say():
print("人生苦短,我学Python!")
def disPython():
print("小菠萝教程:https://www.cnblogs.com/poloyy/")
test.py
from demo import * say()
disPython()
执行结果
人生苦短,我学Python!
小菠萝教程:https://www.cnblogs.com/poloyy/
如果对象不想被引入呢
如果 demo.py 模块中的 disPython() 函数不想让其它文件引入,则只需将其名称改为 _disPython() 或者 __disPython()
再次执行 test.py,输出结果
人生苦短,我学Python!
Traceback (most recent call last):
File "C:/Users/polo/Desktop/2.py", line 4, in <module>
disPython()
NameError: name 'disPython' is not defined
test.py 文件中无法使用未引入的 disPython() 函数
Python 模块 __all__ 变量
- 模块提供的 __all__ 变量,该变量的值是一个列表,存储的是当前模块中一些对象成员(变量、函数或者类)的名称(字符串格式)
- 通过在模块文件中设置 __all__ 变量,当其它文件以 from 模块名 import * 的形式导入该模块时,该文件中只能使用 __all__ 列表中指定的对象成员,未指定的成员是无法导入的
demo.py
def say():
print("人生苦短,我学Python!") def disPython():
print("小菠萝教程:https://www.cnblogs.com/poloyy/")
__all__ = ["say"]
__all__ 变量只包含 say()的函数名,不包含 disPython() 函数的名称
test.py
from demo import * say()
disPython()
运行 test.py
人生苦短,我学Python!
Traceback (most recent call last):
File "C:/Users/mengma/Desktop/2.py", line 4, in <module>
disPython()
NameError: name 'disPython' is not defined
- 对于 test.py 来说,demo.py 模块中的 disPython() 函数是未引入,这样调用是非法的
- 重点:__all__ 变量仅限于在其它文件中以 from 模块名 import * 的方式引入
使用以下 2 种方式引入模块,__all__ 变量是无效的
方式一
import 模块名 的形式导入模块,通过该方式导入模块后,总可以通过模块名前缀(如果为模块指定了别名,则可以使用模快的别名作为前缀)来调用模块内的所有成员(除了以下划线开头命名的成员)
demo.py
def say():
print("人生苦短,我学Python!") def disPython():
print("小菠萝教程:https://www.cnblogs.com/poloyy/") __all__ = ["say"]
test.py
import demo demo.say()
demo.disPython()
运行 test.py
人生苦短,我学Python!
小菠萝教程:https://www.cnblogs.com/poloyy/
虽然 demo.py 模块中设置有 __all__ 变量,但是当以 import demo 的方式引入后,__all__ 变量将不起作用
方式二
from 模块名 import 对象成员 的形式直接导入指定成员,使用此方式导入的模块,__all__ 变量即便设置,也不起作用
demo.py
仍然是上面的 demo 代码
test.py
from demo import say
from demo import disPython say()
disPython()
运行 test.py
人生苦短,我学Python!
小菠萝教程:https://www.cnblogs.com/poloyy/
Python - __all__ 变量的更多相关文章
- Python __all__变量用法
Python中一个py文件就是一个模块,“__all__”变量是一个特殊的变量,可以在py文件中,也可以在包的__init__.py中出现. 1.在普通模块中使用时,表示一个模块中允许哪些属性可以被导 ...
- Python __all__系统变量
#__all__系统变量的使用 ''' __all__可以赋值一个字符串列表,列表中的元素表示外界调用该py文件可以使用的函数或者类 如果使用了__all__系统变量,并且调用该py文件使用的是fro ...
- 配置python环境变量(转)
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...
- python学习 变量的操作 与 基本数据类型
一变量(本文使用python3.5): #变量:是计算机内存中的一块区域,变量可以存储规定范围内的值,变量可以改变#在python中变量是计算机内存中数据的引用 python的变量没有明显的类型,具体 ...
- python的变量传递
python中变量都被视为对象的引用.python函数调用传递参数的时候,不允许程序员选择传值还是传引用,python参数传递采用的都是“传对象引用”的方式. 这种方式相当于传值和传引用的结合 ...
- Python中变量的作用域(variable scope)
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
- Windows下python环境变量配置
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1. 首先需要在系统中注册python环境变量:假设python的安装 ...
- windows7下python环境变量配置
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行或cmd里直接使用python命令. 1. 首先需要在系统中注册python环境变量:假设pyth ...
- FAQ:Python环境变量配置
Python安装安装成,需要配置环境变量: 默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1. 首先需要在系统中注册 ...
随机推荐
- 管理 Python 多版本,pyenv 用起来
介绍 学习使用pyenv在本地安装多个 Python 版本,这样既不影响工作,也不影响生活~ pyenv 可让你轻松地在多个 Python 版本之间切换.它简单.不引人注目,并且遵循 UNIX 的单一 ...
- 温故知新:老铁,WeakReference了解一下?
本文供稿--大师兄 弱引用是个什么鬼?大白话说就是不那么强的引用(哈哈,纯属玩笑,实际可不是这样滴),那强引用又是个什么鬼?他们有什么用处?问题有点迷,君阅完这篇文章后或许你心中就有答案了-- 什么是 ...
- linux上传下载文件(转载https://www.jb51.net/article/143112.htm)
转载于:https://www.jb51.net/article/143112.htmLinux下目录复制:本机->远程服务器 1 scp -r /home/shaoxiaohu/test1 z ...
- 再过五分钟,你就懂 HTTP 2.0 了!
Hey guys ,各位小伙伴们大家好,这里是程序员 cxuan,欢迎你收看我最新一期的文章. 这篇文章我们来聊一聊 HTTP 2.0,以及 HTTP 2.0 它在 HTTP 1.1 的基础上做了哪些 ...
- C# .NetCore简单实现无限递归的功能
1:在实际开发中,我们会经常使用到无限递归的情况,如菜单,父子级等的情况 2:Code 1 using System; 2 using System.Collections.Generic; 3 us ...
- MySQL5.7 高可用高性能配置调优
[client]default-character-set = utf8mb4[mysqld]### 基本属性配置port = 3306datadir=/data/mysql# 禁用主机名解析skip ...
- pip 源的问题
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.douban.com some-package
- canal数据同步
前面提到数据库缓存不一致的几种解决方案,但是在不同的场景下各有利弊,而今天我们使用的canal进行缓存与数据同步的方案是最好的,但是也有一个缺点,就是相对前面几种解决方案会引入阿里巴巴的canal组件 ...
- Linux档案权限篇之一
一.查看档案的属性 "ls" 第一列为档案的权限: d:代表是目录 -:代表是文件 l:代表是连接文件(相当于windows里面的快捷方式) b:代表块设备(如硬盘) c:代表字符 ...
- docker入门及常用命令
Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...