1.什么是模块
模块就是一系列功能的集合体
分为三大类:
1>、内置的模块
2>、第三方的模块
3>、自定义的模块
一个Python文件夹本身就是一个模块,m.py m就是模块名
模块有四种形式:
1> 使用python编写的.py文件
2> 已被编译为共享库或DLL的C或C++扩展
3> 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4> 使用C编写并链接到python解释器的内置模块
2.为什么要有模块
内置的模块与第三方模块可以拿来就用,无需定义,非常方便
自定义模块,可以将程序的各个部分功能的代码提取出来放到一块为大家共享使用,减少了代码冗余,程序组织结构更加清晰。
import foo
# 首次导入模块会发生的事情
# 1.会执行模块foo.py
# 2.产生foo.py的名称空间,将foo.py运行过程中产生的名字都丢到foo.py的名称空间
# 3.在当前文件中产生的有一个名字foo,该名字指向2中产生的名称空间
# 之后的导入,都是直接引入首次导入产生的名称空间,不会重复执行代码
3、如何使用模块
8.1import导入模块
import foo
print(foo.x)
print(foo.get())
print(foo.change())
强调1:模块名.名字,是指名道姓地问某一个模块要名字对应的值,不会与当前名称空间中的名字发生冲突
x=1111111111111
print(x)
print(foo.x)
强调2:无论是查看还是修改操作的都是模块本身,与调用位置无关
import foo
x=3333333333
foo.get()
foo.change()
print(x)
print(foo.x)
foo.get()
注意事项
可以以逗号为分隔符在一行导入多个模块,但是不建议在一行同时导入多个模块
import time,foo,m
建议如下所示导入多个模块
import time
import foo
import m
导入模块的规范
python内置模块
第三方模块
程序员自定义模块
起别名import 。。。 as 。。。
import foo as f # f=foo
f.get()
自定义模块的命名应该采用纯小写+下划线的风格
可以在函数内导入模块
def func():
import foo
模块是第一类对象
import foo
Python文件的两种用途:
1.当做文件运行
2.当做模块导入
——name——
# print(__name__) #
# 1、当foo.py被运行时,__name__的值为'__main__'
# 1、当foo.py被当做模块导入时,__name__的值为'foo'
# if __name__ == '__main__':
# print('文件被执行')
# get()
# change()
# else:
# # 被当做模块导入时做的事情
# print('文件被导入')
# pass
8.2from import 导入模块
import导入模块在使用时必须加前缀名
优点:不会与当前名称空间中的名字冲突
缺点:加前缀会显得麻烦
import foo
foo.x
from...impot...导入模块在使用时不用加前缀
优点:代码更精简
缺点:容易与当前名称空间混淆
from foo import x # x=模块foo中值1的内存地址
x=1111
from ... import ...导入也发生了三件事
1、产一个模块的名称空间
2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间去
3、在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址
一行导入多个名字(不推荐)
from foo import x,get,change
*:导入模块中的所有名字
# name='hello'
# from foo import *
# print(name)
from socket import *
了解:all
from foo import *
print(x)
print(get)
print(change)
无论是import还是from...import在导入模块时都涉及到查找问题
优先级:
1、内存(内置模块)
2、硬盘:按照sys.path中存放的文件的顺序依次查找要导入的模块
import sys
# 值为一个列表,存放了一系列的对文件夹
# 其中第一个文件夹是当前执行文件所在的文件夹
print(sys.path)
import foo # 内存中已经有foo了
foo.say()
import time
time.sleep(10)
import foo
foo.say()
起别名
from foo import get as g
print(g)
循环导入问题
demo01.py文件导入m1.py模块,m1模块导入m2模块,m2模块又导入m1模块,两个模块互相导入,此时就会出现问题。
解决方式:
1.把代码都放入到导入模块代码的上面
2.把导入模块的代码放到函数中
浙公网安备 33010602011771号