个人主页:Yang-ai-cao
系列专栏:Python学习
博学而日参省乎己,知明而行无过矣
目录
一、 模块
模块是一个包含Python代码的文件。模块可以定义函数、类和变量,也可以包含可执行的代码。通过模块化,我们可以将代码分割成多个文件,使代码更易于管理和维护。
1、创建模块
创建一个模块非常简单,只需创建一个包含Python代码的文件即可。
例如,创建一个名为`mymodule.py`的文件:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
def add(a, b):
return a + b
2、导入模块
要使用模块中的函数或变量,可以使用`import`语句导入模块。
# main.py
import mymodule
print(mymodule.greet("Alice"))
print(mymodule.add(3, 4))
3、从模块中导入特定的函数或变量
可以使用“from ... import ...”语句从模块中导入特定的函数或变量。
# main.py
from mymodule import greet, add
print(greet("Bob"))
print(add(5, 6))
4、模块搜索路径
当你导入一个模块时,Python会在一系列目录中搜索该模块。这些目录包括:
1. 当前脚本的目录
2. 环境变量`PYTHONPATH`中的目录
3. 标准库目录
可以使用`sys.path`查看模块的搜索路径。
import sys
print(sys.path)
二、包
包是一个包含多个模块的目录。包使用一个特殊的文件`__init__.py`来标识其目录。通过包,我们可以组织和管理多个模块。
1、创建包
创建一个包需要以下步骤:
1. 创建一个目录。
2. 在目录中创建一个“__init__.py”文件。
3. 在目录中添加模块文件。
例如,创建一个名为“mypackage”的包:
mypackage/
__init__.py
module1.py
module2.py
“module1.py”文件:
# mypackage/module1.py
def foo():
return "foo from module1"
"module2.py"文件:
# mypackage/module2.py
def bar():
return "bar from module2"
"__init__.py"文件可以为空,也可以包含包的初始化代码:
# mypackage/__init__.py
__all__ = ["module1", "module2"]
2、导入包中的模块
可以使用"import"语句导入包中的模块。
# main.py
import mypackage.module1
import mypackage.module2
print(mypackage.module1.foo())
print(mypackage.module2.bar())
3、从包中导入特定的函数或变量
可以使用"from ... import ..."语句从包中的模块导入特定的函数或变量。
# main.py
from mypackage.module1 import foo
from mypackage.module2 import bar
print(foo())
print(bar())
4、相对导入
在包内的模块之间,可以使用相对导入。相对导入使用`.`表示当前目录,`..`表示上一级目录。
例如,在`mypackage/module2.py`中导入`module1`中的`foo`函数:
# mypackage/module2.py
from .module1 import foo
def bar():
return f"bar and {foo()}"
5、示例项目结构
以下是一个示例项目结构,展示了如何组织模块和包:
myproject/
main.py
mypackage/
__init__.py
module1.py
module2.py
"main.py"文件:
# main.py
from mypackage.module1 import foo
from mypackage.module2 import bar
print(foo())
print(bar())
"mypackage/module1.py"文件:
# mypackage/module1.py
def foo():
return "foo from module1"
"mypackage/module2.py"文件:
# mypackage/module2.py
from .module1 import foo
def bar():
return f"bar and {foo()}"
运行"main.py"将输出:
foo from module1
bar and foo from module1
通过模块和包,我们可以将代码组织得更加清晰和模块化,使得代码的维护和扩展更加容易。