一、 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 解析器对模块位置的搜索顺序是:
- 当前目录。
- 如果设置了 PYTHONPATH 环境变量,会在该变量指定的目录中搜索。
- 标准库目录。
例如,如果你有一个模块 custom_module.py 在当前目录下,你可以这样导入:
import custom_module
如果模块不在当前目录,比如在另一个特定的目录 /path/to/module_directory/,Python 可能无法直接找到该模块,除非将该目录添加到搜索路径中。
四、如何配置 PYTHONPATH 变量
在不同的操作系统中配置 PYTHONPATH 的方法略有不同。
在 Windows 上
- 右键点击 “我的电脑”,选择 “属性”。
- 点击 “高级系统设置”。
- 在 “系统属性” 窗口中,点击 “环境变量” 按钮。
- 在 “环境变量” 窗口中,找到 “系统变量” 部分,找到名为 “PYTHONPATH” 的变量(如果没有,可以新建一个)。
- 编辑该变量,将模块所在的目录路径添加进去,多个路径之间用分号分隔。
在 Linux 和 macOS 上
- 打开终端。
- 编辑 ~/.bash_profile 或 ~/.bashrc 文件(根据你的 shell 类型)。
- 添加以下行:export PYTHONPATH=$PYTHONPATH:/path/to/your/module/directory。
- 保存文件并使更改生效,可以通过在终端中运行 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