模块简介
1. 什么是模块?
模块就是一些列功能的集合,模块中就是提前写好了很多的功能,直接拿来使用。Python模块是用于组织Python代码的一种方式,可以将相似功能的代码封装在一个模块中,方便使用和维护。Python模块通常以.py结尾,包含了一些函数、类、变量和常量等内容。
2. 为什么要用模块?
站在巨人的肩膀上,别人写好的一些功能我们把它下载下来直接用在我们自己的项目中,大大提高开发效率
Python标准库中包含了大量的模块,涵盖了文件处理、网络编程、日期和时间、数学计算、图形用户界面等多个领域。此外,还可以通过第三方库或自定义模块扩展Python的功能。
Python模块的使用通常需要先导入,可以使用import语句实现导入。比如,要导入Python标准库中的math模块,可以使用以下代码:
import math
导入后,可以使用该模块中的函数和变量。比如,要计算圆的面积,可以使用math模块中的pi常量和pow函数,代码如下:
r = 2.5
area = math.pi * math.pow(r, 2)
print(area)
除了使用import语句导入整个模块,也可以使用from语句导入指定的函数、类、变量等内容。比如,要导入math模块中的pi常量和sqrt函数,可以使用以下代码:
from math import pi, sqrt
导入后,可以直接使用pi和sqrt变量和函数。比如,要计算2的平方根,可以使用sqrt函数,代码如下:
result = sqrt(2)
print(result)
3. 模块的分类
Python模块可以分为三类:
- 内置模块:Python自带的模块,例如math、random等。
- 第三方模块:由第三方开发者开发的模块,需要使用pip等工具进行安装,例如numpy、pandas等。
- 自定义模块:用户自己编写的模块,可以在程序中引用。自定义模块可以按照需要进行组织和管理。
4. 模块存在的形式
Python模块可以以多种形式存在,包括:
-
Python源文件:这是最常见的一种形式,即以.py为后缀的Python代码文件。可以使用import语句导入该文件作为一个模块。
-
编译扩展模块:Python支持使用C或C++编写的扩展模块,这些模块通常使用Python的API来和Python解释器进行交互,可以提供比Python更高效的算法和数据结构实现。
-
标准库模块:Python标准库中包含了大量的模块,这些模块是Python自带的,可以直接使用,无需额外安装。
-
第三方模块:Python社区中有大量的第三方模块,这些模块由各种个人和组织提供,可以使用pip等包管理器进行安装和使用。
-
内置模块:Python解释器中还内置了一些模块,例如sys、os等,可以直接使用,无需额外导入。
模块的导入方式之import句式
Python模块的使用通常需要先导入,可以使用import语句实现导入。比如,要导入Python标准库中的math模块,可以使用以下代码:
import math
导入后,可以使用该模块中的函数和变量。比如,要计算圆的面积,可以使用math模块中的pi常量和pow函数,代码如下:
r = 2.5
area = math.pi * math.pow(r, 2)
print(area)
除了使用import语句导入整个模块,也可以使用from语句导入指定的函数、类、变量等内容。比如,要导入math模块中的pi常量和sqrt函数,可以使用以下代码:
from math import pi, sqrt
导入后,可以直接使用pi和sqrt变量和函数。比如,要计算2的平方根,可以使用sqrt函数,代码如下:
result = sqrt(2)
print(result)
模块 from...import...句式
"from...import" 句式用于导入 Python 模块中的特定函数、变量或者类。它的语法如下:
from module_name import name1, name2, ...
这个语句将会从指定的模块中导入指定的函数、变量或类。它们可以直接在代码中使用,而不用前缀模块名。
例如,我们可以使用以下代码来导入 Python 标准库中的 os 模块中的 getcwd() 函数:
from os import getcwd
current_dir = getcwd()
print(current_dir)
这里,我们仅导入了 os 模块中的 getcwd() 函数,因此在使用的时候就可以直接使用函数名,而不用使用前缀模块名。
总结from...import...句式
from...import...句式
导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
导入文件的时候发生了什么事儿?
1. 首先会运行执行文件,产生执行文件的全局名称空间
2. 运行导入文件md
3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
4. 会在执行文件中产生一个名字money指向导入文件的名称空间中得money
如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入的名字一样的时候)
出现冲突的时候离谁近用谁的
以后所有的导入语句都写在文件的开头
"""
# money = 999
# print(money)
# from md import money
# print(money)
# print(read1)
# read2()
# change()
def read1():
print('from read1')
read1()
模块导入语句的其他用法
除了常规的导入模块的语法 import 模块名
,Python还提供了其他用法,如下所示:
1.导入模块并给模块起别名:
import 模块名 as 别名
from md import money as m
from md import read1 as r1
from md import read2 as r2
import md
def read1():
print('from read1')
read1()
r1()
md.read1()
2.导入模块中的指定函数或变量:
from 模块名 import 函数名/变量名
3. 连续导入
import md
import time
import os
import sys
import md,time,os,sys
4.导入模块中的所有函数和变量:
from 模块名 import *
from md import *
from md import *
read1()
change()
__all__ = ['money', 'read1', 'change']
5.判断模块是否是主程序:(判断执行函数还是导入函数)
if __name__ == '__main__':
# 在此处编写主程序的代码
5.1判断文件类型(执行文件、导入文件)
if __name__ == '__main__': # md
read2()
if __name__ == '__main__':
'''在这个判断里面写的代码,只有是以执行文件运行的时候,才会被执行,当被当成导入文件的时候,不会被运行'''
这个用法通过两种方式执行Python代码:
一种是作为脚本执行,另一种是作为模块导入。当脚本被执行时,__name__
被赋值为__main__
,如果它是作为模块导入,__name__
被赋值为模块名。这个用法可用于在模块中定义或测试函数。
另外,在Python中,标准库中有一些特殊的模块,如time
、os
、sys
等,这些模块通常不需要安装即可直接使用。
6 循环导入
循环导入是一种常见的Python问题,它发生在两个或多个模块中导入彼此的情况下。如果不处理循环导入,程序可能会遇到导入错误或无限递归。
以下是一些处理Python循环导入的方法:
-
重新组织代码结构:重构代码结构是解决循环导入的最佳方法之一。可以将共享的函数、变量和类提取到单独的模块中,以避免循环导入。
-
延迟导入:延迟导入是一种技术,它延迟了模块的导入。在需要导入的时候,在模块的函数或方法中导入模块,而不是在模块的顶部导入。这可以避免循环导入。
-
导入模块的部分:一种方法是只导入模块的一部分,而不是整个模块。例如,可以只导入模块的函数或类,而不是整个模块。这可以避免循环导入。
-
使用全局变量:如果必须在模块之间共享变量,可以将变量定义为全局变量。这可以避免循环导入。
总之,处理Python循环导入需要仔细的设计和策略。尽量避免循环导入,以确保程序的正确性和可靠性。
以c1c2为例:
在你编码的过程中,循环导入是不能允许出现的
如果你的代码出现了循环导入问题,那就是你的代码设计不合理,及时更正
c1 c2为导入文件,设置错误的调用方式from c2 import y,from c1 import y导致循环导入执行文件
修改后的循环导入(仅修改,无实际作用)
END