笔记 · 2024-10-23

Python 模块详解

一、 Python 模块简介

Python 模块 (Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句。例如,我们创建一个名为 my_module.py 的模块文件,内容如下:

def say_hello():
    return "Hello from my_module!"

my_variable = 42

这个模块定义了一个函数 say_hello 和一个变量 my_variable。

二、import 语句:模块的几种引入方式

1.直接导入模块

   import my_module

   print(my_module.say_hello())
   print(my_module.my_variable)

2.导入模块并指定别名

   import my_module as mm

   print(mm.say_hello())
   print(mm.my_variable)

3.从模块中导入特定的对象

   from my_module import say_hello, my_variable

   print(say_hello())
   print(my_variable)

4.导入模块中的所有对象(不推荐,可能导致命名冲突)

   from my_module import *

   print(say_hello())
   print(my_variable)

三、搜索路径

当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

  1. 当前目录。
  2. 如果设置了 PYTHONPATH 环境变量,会在该变量指定的目录中搜索。
  3. 标准库目录。

例如,如果你有一个模块 custom_module.py 在当前目录下,你可以这样导入:

import custom_module

如果模块不在当前目录,比如在另一个特定的目录 /path/to/module_directory/,Python 可能无法直接找到该模块,除非将该目录添加到搜索路径中。

四、如何配置 PYTHONPATH 变量

在不同的操作系统中配置 PYTHONPATH 的方法略有不同。

在 Windows 上

  1. 右键点击 “我的电脑”,选择 “属性”。
  2. 点击 “高级系统设置”。
  3. 在 “系统属性” 窗口中,点击 “环境变量” 按钮。
  4. 在 “环境变量” 窗口中,找到 “系统变量” 部分,找到名为 “PYTHONPATH” 的变量(如果没有,可以新建一个)。
  5. 编辑该变量,将模块所在的目录路径添加进去,多个路径之间用分号分隔。

在 Linux 和 macOS 上

  1. 打开终端。
  2. 编辑 ~/.bash_profile 或 ~/.bashrc 文件(根据你的 shell 类型)。
  3. 添加以下行:export PYTHONPATH=$PYTHONPATH:/path/to/your/module/directory。
  4. 保存文件并使更改生效,可以通过在终端中运行 source ~/.bash_profile 或 source ~/.bashrc。

五、命名空间和作用域

命名空间是一个从名称到对象的映射。在 Python 中,不同的模块和函数都有自己的命名空间。
作用域决定了在程序的哪些部分可以访问特定的变量。Python 有局部作用域、全局作用域和内置作用域。例如:

x = 10  # 全局变量

def my_function():
    y = 20  # 局部变量
    print(x)  # 可以访问全局变量
    print(y)

my_function()
print(x)
# print(y)  # 会报错,因为 y 是局部变量,在函数外部不可访问

六、dir () 函数

例如:

import my_module

print(dir(my_module))

这将列出 my_module 模块中所有的函数、变量等名称。

七、globals () 和 locals () 函数

globals() 返回一个包含当前全局符号表的字典。locals() 返回一个包含当前局部符号表的字典。

def my_function():
    x = 10
    print(locals())

my_function()
print(globals())

八、reload () 函数

reload() 函数用于重新加载已经导入的模块。

import my_module

# 修改 my_module.py 文件

from importlib import reload
reload(my_module)

九、Python 中的包

包是一种通过使用 “点分模块名称” 来构造 Python 模块命名空间的方法。一个包是一个包含 __init__.py 文件的目录。 例如,我们有一个包结构如下:

my_package/
    __init__.py
    module1.py
    module2.py

init.py 文件中可以进行一些初始化操作或者导入包中的模块,以便在导入包时可以方便地访问这些模块。要使用这个包中的模块,可以这样导入:

from my_package import module1
from my_package.module2 import some_function
目录