24 浅谈模块
1、定义:
- 模块本质上就是一个.py文件
- import语句用于导入模块
- if __name__ == "__main__"用于区分直接运行和被导入
- sys.argv包含命令行参数
- 模块可以包含函数、类和变量
2、模块查找机制
Python解释器按以下顺序查找模块:
- 当前目录
- PYTHONPATH环境变量中的目录
- Python标准库目录
- 第三方包目录(site-packages)
-  可以通过sys.path查看完整的模块搜索路径。 
3、模块的结构如下
#!/usr/bin/env python3  # 这是一个shebang行,告诉Unix/Linux系统使用哪个Python解释器来执行此脚本
# -*- coding:utf-8 -*-  # 这是编码声明,指定源代码文件的编码格式为UTF-8
"""
Python模块详解与示例
------------------
这是一个模块的文档字符串(docstring),用三引号包围。
当使用help()函数查看模块信息时,这部分内容会被显示出来。
模块是Python代码逻辑组织和重用的基本单位。
"""
# 模块元信息定义(这些变量通常以双下划线开头和结尾,被称为"魔术变量"或"双下变量")
__author__ = "Michael Liao"  # 模块作者信息
__version__ = "0.1"  # 模块版本号,遵循语义化版本规范
__date__ = "2025-03-14"  # 模块创建/修改日期
__time__ = "10:00:00"  # 模块创建/修改时间
__email__ = "michael@example.com"  # 作者联系方式
__license__ = "MIT"  # 模块许可证类型
__description__ = "A test module"  # 模块简短描述
# 导入其他模块
# sys模块提供了与Python解释器及其环境交互的函数和变量
import sys  # 系统相关的参数和函数
# 模块中的函数定义
def test():
    """
    测试函数 - 演示如何处理命令行参数
    sys.argv是一个列表,包含了命令行参数:
    - argv[0]是脚本名称
    - argv[1]及之后的元素是传递给脚本的参数
    """
    args = sys.argv  # 获取命令行参数列表
    print("args:", args)
    # 根据参数数量执行不同的操作
    if len(args) == 1:
        # 没有额外参数时
        print("Hello, world!")
        print("参数是:", args[0])  # 打印脚本名称
    elif len(args) == 2:
        # 有一个额外参数时
        print("Hello, %s!" % args[1])  # 使用第一个参数
    else:
        # 有多个额外参数时
        print("Too many arguments!")
# 模块执行入口
# 这个条件判断是Python模块的一个重要习惯用法
# 它使得这个文件既可以作为模块被导入,也可以作为脚本直接运行
if __name__ == "__main__":
    """
    当直接运行此脚本时,__name__变量的值为"__main__"
    当作为模块被其他脚本导入时,__name__变量的值为模块名(即文件名去掉.py)
    这种模式允许代码在不同情况下有不同的行为:
    - 作为脚本运行时执行测试函数
    - 作为模块导入时只提供函数和类,不执行具体操作
    """
    test()  # 调用测试函数
"""
模块使用方法总结:
---------------
1. 直接运行:
   python 29.模块.py [参数1] [参数2]...
2. 作为模块导入:
   import 模块名                  # 导入整个模块
   from 模块名 import 函数名      # 只导入特定函数
   from 模块名 import *          # 导入所有内容(不推荐)
   import 模块名 as 别名          # 使用别名导入
3. 模块查找路径:
   Python解释器按以下顺序查找模块:
   - 当前目录
   - PYTHONPATH环境变量中的目录
   - Python标准库目录
   - 第三方包目录(site-packages)
   
   可以通过sys.path查看完整的模块搜索路径
"""
