【一】模块
模块(Module)是指包含了一组相关功能的代码集合,可以通过导入(import)的方式在其他程序中重复使用。
在Python中,一个模块可以是一个包含了函数、类、变量和语句的.py文件。模块提供了一种组织和重用代码的方式,使得代码的编写、维护和理解都变得更加简单和高效。
通过将相关的代码组织在模块中,我们可以将代码按照功能进行划分,使得每个模块都具有特定的目的和责任。模块可以被其他程序导入,并通过调用其中的函数、使用其中的类或访问其中的变量来实现代码的重用。
Python标准库提供了大量的模块,涵盖了各种常见的任务和功能,例如文件操作、网络通信、数据处理、数学计算等。此外,还有许多第三方库和框架也提供了自己的模块,可以扩展Python的功能。
1.1 导入方式
1.1.1 impor直接导入
# 导入math模块
# 可以导入多个模块用逗号分割
# import math,os
import math
# 使用math模块中的函数和常量
print(math.sqrt(16)) # 计算平方根
print(math.pi) # 输出圆周率
# 导入模块中的特定函数或类
from math import sin, cos
# 使用导入的函数
print(sin(0.5)) # 计算正弦值
print(cos(0.5)) # 计算余弦值
在上述示例中,我们首先使用import
语句导入了math
模块,然后使用math.sqrt()
和math.pi
来调用该模块中的函数和常量。
1.1.2 from + import
调用文件内容
from func.get_user_info import main
main()
调用文件内容
def get_user_info(info):
def inner(*args, **kwargs):
global username_user_input, password_user_input
username_user_input = input('请输入用户名').strip()
password_user_input = input('请输入密码').strip()
return info(*args, **kwargs, username_input=username_user_input, password_input=password_user_input)
return inner
@get_user_info
def main(*args, **kwargs):
...
return username_user_input, password_user_input
1.1.3 导入后起别名
from func.get_user_info import main as zhu
zhu()
1.2 导入文件后执行的操作
当在Python中使用import
语句导入文件时,会执行以下操作:
-
导入模块:Python解释器会查找指定的模块文件,并将其加载到内存中。如果模块已经被加载过,它将被直接引用,否则将执行下面的步骤。
-
编译模块:Python解释器会将模块文件编译成字节码形式,以便后续执行。
-
创建模块的命名空间:一个模块在导入时会创建一个独立的命名空间,用于存储模块中定义的函数、变量和类等。
-
执行模块代码:Python解释器会按顺序执行模块中的代码。这意味着模块中的顶层语句(不在任何函数或类定义内部的语句)将被执行。
- 变量定义和赋值语句将创建并初始化相应的变量。
- 函数定义语句将创建函数对象并将其绑定到相应的名称。
- 类定义语句将创建类对象并将其绑定到相应的名称。
-
返回模块对象:导入完成后,
import
语句将返回表示已导入模块的模块对象。可以使用该对象来访问模块中定义的函数、变量和类。
1.3 循环导入问题
循环导入指的是在模块之间相互导入形成循环依赖的情况。当两个或多个模块相互导入时,如果导入路径形成循环,就会导致循环导入的错误。
例如,假设有两个模块A和B,模块A导入了模块B,同时模块B也导入了模块A。当任何一个模块被导入时,Python解释器会尝试导入所需的依赖模块。在这种情况下,导入模块A时会触发导入模块B,而导入模块B时又会触发导入模块A,从而形成了循环依赖。
循环导入可能会导致程序出现以下问题:
- NameError:由于模块在导入过程中还未完全加载,因此无法访问对方模块中的名称。
- 逻辑错误:循环导入可能导致代码执行顺序混乱,使得预期的行为无法实现。
【二】包
包(Package)是一种组织和管理Python模块的方式。它是一个包含多个模块的目录,目录下通常会包含一个特殊的文件__init__.py
,用于标识该目录为一个包。
通过使用包,可以将相关的模块组织在一起,形成一个更大的功能单元。包的主要目的是为了提供一种更好的模块管理方式,使得模块的组织结构更清晰、易于维护和重用。
包可以创建多层次的结构,用于更好地组织和管理模块。可以在包中导入其他模块和子包,并通过点号.
进行层级访问。
例如,假设我们有一个名为my_package
的包,它包含以下文件和目录:
my_package/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.py
2.1 包的导入方式
# 导入包
import my_package.module1
# 导入my_package包中subpackage模块的module3
from my_package.subpackage import module3
标签:导入,user,模块,import,input,math
From: https://www.cnblogs.com/wx-x/p/17902055.html