在 Python 中,**模组(Module)和包(Package)**是组织和管理代码的基本单位。以下是它们的详细说明:
模组 (Module)
- 定义: 模组是包含 Python 代码的档案,通常是以 .py 为扩展名的档案。模组可以包含函数、类别和变数等。
- 用途: 模组使得代码可以被重用和组织。你可以将相关的功能放在同一个模组中,然后在其他 Python 脚本中导入使用。
- 导入模组:使用 import 语句来导入模组。例如:
import math
print(math.sqrt(16)) # 输出:4.0
包 (Package)
- 定义:包是一种特殊的模组,它是一个包含多个模组的目录。包中必须包含一个名为 init.py 的档案(即使是空的),以告诉 Python 这是一个包。
- 用途:包可以用来组织和分层管理模组,特别是在大型应用程式中。它们可以帮助避免命名冲突,并提供更清晰的代码结构。
- 导入包中的模组:使用 import 语句来导入包中的模组。例如,如果有一个包 mypackage,里面有一个模组 mymodule,可以这样导入:
from mypackage import mymodule
总结
- 模组 是单一的 Python 档案,可以被重用。
- 包 是一个包含多个模组的目录,用于组织和管理代码。
使用 Python 模组时,通常不会自动生成额外的文件,除非涉及到特定的情况。以下是一些可能产生的文件类型:
- 描述:当你导入一个模组时,Python 会将其编译成字节码,并将其存储为 .pyc 档案,这些档案通常位于 pycache 目录中。
- 用途:这样可以加快下次导入模组的速度,因为不需要重新编译源码。
- 描述:当 Python 生成字节码档案时,这些档案会被存放在 pycache 目录中。
- 内容:这个目录中会包含以 .pyc 为扩展名的字节码档案,档名通常会包括源码档案的名称和 Python 的版本号。
- 描述:如果你使用的模组是包的一部分,则包目录中必须有一个名为 init.py 的档案。这个档案可以是空的,但它告诉 Python 该目录应该被视为一个包。
总结
在使用模组时,最常见的自动生成文件是字节码档案(.pyc)和 pycache 目录。如果使用包,则需要包含 init.py 档案来标识包。这些文件和目录有助于提高代码的执行效率和组织性。
import的方法
import module_name
from module_name import function_name
import module_name as alias
mypackage/
__init__.py
mymodule.py
mymodule.py 的内容:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
你可以这样导入 mymodule 模组:
from mypackage import mymodule
print(mymodule.greet("Alice")) # 输出:Hello, Alice!
如果你的包中有子包,可以使用点来导入子模组。例如:
mypackage/
__init__.py
subpackage/
__init__.py
submodule.py
from mypackage.subpackage import submodule
print(submodule.greet("Bob")) # 输出:Hello from submodule, Bob!
from module_name import *
import importlib
module = importlib.import_module(\'module_name\')
在 Python 中,Namespace(命名空间)是一个容器,用于存储变数名称(标识符)及其对应的物件。命名空间的主要目的是为了避免命名冲突,确保同名的变数或函数在不同的范畴中不会互相影响。
命名空间的类型 LEGB 的四个层级LEGB 的查找顺序是按照以下层级进行的:
Local (局部):首先查找当前函数内部定义的变数。如果变数在局部命名空间中存在,则直接使用。Enclosing (闭包):如果在局部命名空间中找不到,则查找包含当前函数的外部函数的命名空间。这适用于嵌套函数的情况。Global (全域):如果在闭包命名空间中仍然找不到,则查找模组层级定义的变数和函数。Built-in (内建):最后,如果在全域命名空间中仍然找不到,则查找 Python 内建的标识符,如 print()、len() 等。
下一篇:python :if name == "main"