Python 模块基础
-
什么是模块?
- 定义:一个 Python 文件(
.py),其中包含了变量、函数、类以及可执行代码。
- 定义:一个 Python 文件(
-
模块的作用
- 提高代码复用性。
- 降低开发门槛。
-
导入模块的常用语法
💡 提示:导入语句一般写在
.py文件的开头。import 模块名 [as 别名]from 模块名 import 功能名 [as 别名]from 模块名 import *
Python 特殊变量:__name__ 与 __all__
1. __name__
- 定义:Python 中非常重要的内置变量,表示当前模块的名称。
- 作用机制:
- 当模块被直接运行时:
__name__的值为"__main__"。- 典型应用:
if __name__ == "__main__":(用于编写测试代码或程序入口)。
- 典型应用:
- 当模块被导入时:
__name__的值等于模块的文件名(不含.py后缀)。
- 当模块被直接运行时:
2. __all__
- 作用:控制在使用
from 模块名 import *语句时,允许导入哪些功能(变量、函数或类)。 - 说明:只有定义在
__all__列表中的名称才会被通配符*导入,未列入的将被忽略。
这里有两个代码示例,分别演示 __name__ 和 __all__ 的实际运行效果。你可以直接复制运行来观察结果。
1. __name__ 的作用演示
这个特性常用于区分“程序入口”和“被调用的模块”,防止测试代码在导入时被误执行。
📄 文件:my_module.py (作为模块)
# my_module.py
def say_hello():
print("你好,我是模块里的函数!")
# 这里的代码只有在【直接运行】本文件时才会执行
if __name__ == "__main__":
print("--- 当前是直接运行模式 ---")
say_hello()
else:
# 当被其他文件 import 时,会走这里(通常不写 else,仅做演示)
print(f"--- 当前是被导入模式,我的名字是: {__name__} ---")
📄 文件:main.py (作为主程序)
# main.py
import my_module
print("主程序开始运行...")
my_module.say_hello()
💻 运行结果对比
- 直接运行
my_module.py:
— 当前是直接运行模式 —
你好,我是模块里的函数! - 运行
main.py:
— 当前是被导入模式,我的名字是: my_module —
主程序开始运行…
你好,我是模块里的函数!
2. __all__ 的作用演示
这个变量用于白名单机制,限制别人用 from xxx import * 时能拿走什么东西。
📄 文件:tools.py (定义模块)
# tools.py
# 定义一个列表,只有在这里面的名字,才能被 import * 导入
__all__ = ['func_public', 'var_public']
var_public = "我是公开变量"
var_private = "我是私有变量" # 不在 __all__ 里
def func_public():
return "我是公开函数"
def func_private():
return "我是私有函数" # 不在 __all__ 里
📄 文件:test_import.py (测试导入)
# test_import.py
from tools import *
# ✅ 可以正常访问,因为在 __all__ 列表中
print(func_public())
print(var_public)
# ❌ 报错:NameError: name 'func_private' is not defined
# 因为 func_private 没有被包含在 __all__ 中
try:
print(func_private())
except NameError as e:
print(f"出错了: {e}")
💡 提示:
虽然__all__限制了import *,但如果使用者明确指定了名字(例如from tools import func_private),依然是可以强制导入的。它更多是一种约定和提示。



没有回复内容