模块
一、什么是模块?
-
模块是一系列功能的结合体,本质上是一个个的.py文件
-
模块的三种来源
- Python内置的模块(Python解释器的):比如:sys/time/os/turtle
- 第三方的模块(别人写的):比如requests
- 自定义的模块(自己写的):比如自己定义的demo.py文件
-
模块的四种表现形式
- 使用Python编写的文件 (了解)
- 编译后的共享库DLL或者会C或者C++库(了解)
- 包下面带有
__init__.py
的一组py文件 - Python解释器下的py
二、为什么要使用模块?
- 模块可以帮我们更好的管理功能代码,比如:函数……
- 可以将项目拆分成一个个的功能,分别存放在不同的py文件(模块)中
三、如何创建,编写,并使用模块?
- 在py文件中编写Python代码,就是编写模块
- 在一个文件中,通过import关键字导入模块
- 在使用模块阶段,必须注意,谁是执行文件,谁是被导入文件(被导入的模块)
- 模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找
- 模块在导入时发生的事情:
- 会先执行当前执行文件,并产生执行文件中的名称空间
- 会执行到导入模块的代码时,被导入的模块会产生一个模块的名称空间
- 会将被导入模块的名称空间加载到内存中
示范文件
# 文件名:foo.py
x = 1
def get():
print(x)
def change():
global x
x =0
class Foo:
def func(self):
print('from the func...')
用模块名称空间中的名字,需要加上该前缀,如下
import foo # 导入模块foo
a = foo.x # 引用模块foo中变量x的值赋值给当前名称空间中的名字a
foo.get() # 调用模块中foo的get函数
foo.change() # 调用模块foo中的change函数
obj=foo.Foo() #使用模块foo的类Foo来实例化,进一步可以执行obj.func()
加上foo.作为前缀就相当于指名道姓地说明要引用foo名称空间中的名字,所以,即使当前执行文件中存在相同的名字,也不会冲突
,并且若当前执行文件的名称空间中存在x,执行foo.get()或foo.change()操作的都是源文件中的全局变量x
# 文件名:foo.py
print('from foo...')
第一次导入模块已经将其加载到内存空间了,之后的重复导入会直接饮用内存中已存在的模块,不会重复执行文件
import foo # 导入模块foo
import foo # 导入模块foo
import foo # 导入模块foo
import foo # 导入模块foo
from foo...
用import语句可以导入多个模块,可以写多行的import语句
import sys
import time
import os
import turtle
也可以写在一行,用逗号分隔
import sys, time, os, turtle...
给模块起别名 as
import 模块 as 模块的别名
模块的导入方式
- import 模块 ——在执行文件中直接import导入
- from 包/模块 import 模块/(函数名、变量名、类名)