Python 模块基础

Python 模块基础

  1. 什么是模块?

    • 定义:一个 Python 文件(.py),其中包含了变量、函数、类以及可执行代码。
  2. 模块的作用

    • 提高代码复用性。
    • 降低开发门槛。
  3. 导入模块的常用语法

    💡 提示:导入语句一般写在 .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),依然是可以强制导入的。它更多是一种约定提示

 

请登录后发表评论

    没有回复内容