前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】模块导入 ⑥ ( `__all__` 变量简介 | `__all__` 变量用法 | import 导入整个模块 - 执行阶段报错 | from 导入整个模块 - 编译阶段报错 )

【Python】模块导入 ⑥ ( `__all__` 变量简介 | `__all__` 变量用法 | import 导入整个模块 - 执行阶段报错 | from 导入整个模块 - 编译阶段报错 )

作者头像
韩曙亮
发布2023-10-11 19:10:58
3420
发布2023-10-11 19:10:58
举报
文章被收录于专栏:韩曙亮的移动开发专栏

一、__all__ 变量简介

1、__all__ 变量

Python 语言中的 __all__ 变量 是一个 列表 数据容器 , 用于控制 本应用 导入的 模块 中 可以使用 导入模块 的哪些 变量 / 函数 / 类 ;

Python 模块 被 应用导入时 , 系统会检查该模块是否定义了 __all__ 变量 :

  • 如果有 定义 __all__ 变量 , 那么导入 该 __all__ 变量 列表 元素 对应的 变量 / 函数 / 类 功能 ;
  • 如果没有 定义 __all__ 变量 , 那么导入该模块中所有功能 ;

2、__all__ 变量用法

在 模块 代码的 最上部定义 __all__ 变量 , 为其赋值一个 元素类型为 字符串类型 的 列表容器变量 ;

当使用

代码语言:javascript
复制
import module_name
from module_name import *

导入整个模块时 , 就会只导入 该 __all__ 变量 列表 元素 对应的 变量 / 函数 / 类 功能 ;

3、import 导入整个模块 - 执行阶段报错

使用

代码语言:javascript
复制
import module_name

导入整个模块 , 在执行阶段报错 , 如 :

代码语言:javascript
复制
Unresolved reference 'minus' 
在这里插入图片描述
在这里插入图片描述

4、from 导入整个模块 - 编译阶段报错

使用

代码语言:javascript
复制
from module_name import *

导入整个模块 , 在编译阶段直接报错 , 无法执行 ;

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:\002_Project\011_Python\HelloPython\Hello.py", line 11, in <module>
    num2 = my_module.miuns(2, 3)
AttributeError: module 'my_module' has no attribute 'miuns'

5、from 导入部分模块功能 - 编译阶段报错

如果使用

代码语言:javascript
复制
from my_module import minus

导入没有定义在 __all__ 变量 中的函数 , 则在编译阶段会报错 ;

在这里插入图片描述
在这里插入图片描述

在执行时 , 也会报错 NameError: name 'miuns' is not defined ;

在这里插入图片描述
在这里插入图片描述

二、代码示例


1、代码示例 - 模块中定义 __all__ 变量

在下面的 Python 模块代码中 , 定义 __all__ 变量 , 为其赋值 ['add'] 列表容器变量 ;

在该 Python 模块中 , 定义了两个函数 , add 函数 和 minus 函数 , 这两个功能可以设置到 __all__ 变量的 列表容器 中 ;

代码示例 :

代码语言:javascript
复制
__all__ = ['add']


def add(a, b):
    print("调用 my_module 模块中的 add 功能")
    return a + b


def minus(a, b):
    print("调用 my_module 模块中的 minus 功能")
    return a - b


if __name__ == '__main__':
    print(add(3, 4))
    print(minus(3, 4))

2、代码示例 - 使用 from 导入模块

使用

代码语言:javascript
复制
from my_module import *

导入上述 定义了

代码语言:javascript
复制
__all__ = ['add']

变量的 Python 模块 , 发现只能访问 add 函数 , 不能访问 minus 函数 ;

如果强行访问 minus 函数 , 在编译阶段 , 会报出

代码语言:javascript
复制
Unresolved reference 'minus' 

错误信息 ;

在这里插入图片描述
在这里插入图片描述

代码示例 :

代码语言:javascript
复制
"""
自定义模块 代码示例
"""

# 导入自定义模块
from my_module import *

num = add(2, 3)
print(num)

# num2 = miuns(2, 3)

执行结果 :

代码语言:javascript
复制
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
调用 my_module 模块中的 add 功能
5

Process finished with exit code 0
在这里插入图片描述
在这里插入图片描述

3、代码示例 - 使用 import 导入模块

完整代码 :

代码语言:javascript
复制
"""
自定义模块 代码示例
"""

# 导入自定义模块
import my_module

num = my_module.add(2, 3)
print(num)

num2 = my_module.miuns(2, 3)
print(num2)

执行结果 :

代码语言:javascript
复制
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
Traceback (most recent call last):
  File "D:\002_Project\011_Python\HelloPython\Hello.py", line 11, in <module>
    num2 = my_module.miuns(2, 3)
AttributeError: module 'my_module' has no attribute 'miuns'
调用 my_module 模块中的 add 功能
5

Process finished with exit code 1

在下图的代码中 , 可以看到

代码语言:javascript
复制
num2 = my_module.miuns(2, 3)

代码在编译阶段 , 没有报错 , 但是在执行阶段 , 报错了 ;

在这里插入图片描述
在这里插入图片描述

4、代码示例 - 使用 from 导入模块功能

代码示例 :

代码语言:javascript
复制
"""
自定义模块 代码示例
"""

# 导入自定义模块
from my_module import minus
from my_module import add

num = add(2, 3)
print(num)

num2 = miuns(2, 3)
print(num2)

上述代码在编译时报错 , 程序无法完成编译 ;

在这里插入图片描述
在这里插入图片描述

强行运行上述代码 , 会报如下错误 :

代码语言:javascript
复制
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
调用 my_module 模块中的 add 功能
5
Traceback (most recent call last):
  File "D:\002_Project\011_Python\HelloPython\Hello.py", line 12, in <module>
    num2 = miuns(2, 3)
NameError: name 'miuns' is not defined

Process finished with exit code 1
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、__all__ 变量简介
    • 1、__all__ 变量
      • 2、__all__ 变量用法
        • 3、import 导入整个模块 - 执行阶段报错
          • 4、from 导入整个模块 - 编译阶段报错
            • 5、from 导入部分模块功能 - 编译阶段报错
            • 二、代码示例
              • 1、代码示例 - 模块中定义 __all__ 变量
                • 2、代码示例 - 使用 from 导入模块
                  • 3、代码示例 - 使用 import 导入模块
                    • 4、代码示例 - 使用 from 导入模块功能
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档