一、模块
1、什么是模块
一个py文件,里面包含函数、方法、变量,可以通过import,form … import导入使用
2、模块的作用
直接调用系统自带,或者别人已经写好的函数,简化书写
3、常见导入方法
常见导入方法 | 解释说明 | 示例 |
---|---|---|
import 模块 | 导入一个模块,并且可以引用其所有方法 | import time |
form 模块 import 方法 | 指定到诶模块下的特定发发 | import sleep |
form 模块 import * | 导入模块下的所有方法,可以在代码中直接使用方法名 | form time import * |
form 模块 import 功能 as 别名 | 为导入的方法添加别名 | form time import sleep as wating |
实例代码:
import time
print(time.time())
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
结果:
1731817078.0912356
2024-11-17 12:17:58
注意点:
1)对应的 item 可以自己定义,但是import 语法会首先把 item当作一个包定义的名称。如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。
2)如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字
3)在模块导入时,模块会被先执行一遍,所以不希望在主程序调用的 可以加一个 if name == ‘main’: 判断
4、创建自定义模块
实质:就是创建一个py文件
注意点:
a、模块命名要求:名称不能以数字开头
b、模块可以引用多次,但是实例、对象只能创建一次
1)定义一个自定义模块
name 是一个python自定义参数,当在主程序中调用是值为main,当在模块中被调用是值为模块名(model),用来判断是否为主程序调用
创建一个model.py文件,文件内容见下方:
def add(x,y):
return x+y
def subt(x,y):
return x-y
if __name__ == '__main__':
print(f"add的函数输出是:{add(1,2)}")
print(f"subtranction的返回是: {subt(1,2)}")
2)模块调用
from model1 import *
n = add(2,3)
m = subt(3,1)
print(f"add的结果为:{n}\nsubt的结果是:{m}")
结果:
add的结果为:5
subt的结果是:2
5、all、name
- name:
是一个python自定义参数,当在主程序中调用是值为main,当在模块中被调用是值为模块名(model),用来判断是否为主程序调用
2)all :
使用场景:控制import * 的内容
只有all中添加的才能通过 import * 导入
示例:在加入all 限制后,subt()函数不能被主程序所调用
__all__ = ['add']
def add(x,y):
return x+y
def subt(x,y):
return x-y
if __name__ == '__main__':
print(f"add的函数输出是:{add(1,2)}")
print(f"subtranction的返回是: {subt(1,2)}")
主程序:
from model1 import *
n = add(2,3)
m = subt(3,1)
print(f"add的结果为:{n}\nsubt的结果是:{m}")
结果:
Traceback (most recent call last):
File "E:\python\python project\venv\model.py", line 8, in <module>
m = subt(3,1)
NameError: name 'subt' is not defined
二、包
1、包是什么:
一个文件夹,里面存放同种种类的模块文件
注意点:包中一定含有一个 init.py文件,与一般文件夹进行区分
2、python自带包
使用:import 包名.模块名
3.创建自定义包
1)pycharm创建一个自定义包
file --> new --> Python Package
2)添加模块文件
def multiplication(x,y):
return x*y
def divsion(x,y):
try:
r = None
r = x*y
except zeroDivisionError as e:
print(f"输入异常,分母不能为0")
finally:
if r:
return x/y
else:
return "输入错误"
if __name__ == '__main__':
print(multiplication(2,3))
print(divsion(2,0))
3)主程序调用
#import november.nov1
from november import nov1
print(f"mutiplication的返回是:{nov1.multiplication(2,3)}")
print(f"divison的返回是:{nov1.divsion(4,2)}")
结果:
mutiplication的返回是:6
divison的返回是:2.0
4、下载外部包
原因:使用外部已经别人已经开发好的包提供效率
方法:pip install -i 镜像地址/包名
常用镜像站地址:
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
豆瓣:http://pypi.douban.com/simple/