一、模块和包
1. 模块module
模块是 Python 程序架构的一个核心概念。Python中模块就是一个
.py
文件,模块中可以定义函数
,变量
,类
。模块可以被其他模块引用
1.1. 创建模块文件
创建文件:utils.py
# 定义变量
name = '张三'
# 定义函数
def sum(a,b):
return a+b
# 定义类
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return 'name:{},age:{}'.format(self.name,self.age)
1.2. 导入模块中的功能
整体导入模块
# 导入模块
import utils
# 使用模块中功能
print(utils.name)
# 调用模块中的sum方法
result = utils.sum(10,20)
# 创建模块utils中的Person类对象
p = utils.Person('张三',30)
导入模块中部分功能
# 从模块中导入部分功能
from utils import name, sum
# 使用name
print(name)
# 调用sum函数
result = sum(10,20)
导入模块中全部功能
from utils import *
# 使用name
print(name)
# 调用sum函数
result = sum(10,20)
# 创建Person对象
p = Person('林青霞',60)
2. 模块的导入冲突
如果两个模块中有同名的变量、函数或者类,同时引入就可能出现冲突
2.1. 部分导入冲突
from hello import name
from hi import name
print(name)
同时引入name
的话,输出的name
是hi
中的name
,是有顺序的
局部引入冲突解决方案
可以通过as
给功能起别名
from hello import name as hello_name
from hi import name as hi_name
print(hello_name)
print(hi_name)
2.2. 全部导入冲突
from hello import *
from hi import *
print(name)
同样输出的是hi中的name属性
全部引入冲突解决方案
直接引入模块
import hello
import hi
print(hello.name)
print(hi.name)
3. 模块的内置变量__name__
__name__
是模块中的内置变量,每个模块都有这个属性
创建hello.py
print(__name__)
直接运行hello.py
,结果为:
__main__
其它模块导入hello.py
import hello
结果为:
hello
3.1. __name__
的特点
- 如果将当前模块作为启动项,
__name__
值为__main__
- 如果当前模块当作依赖引入,
__name__
值不为__main__
,为依赖的模块名称
3.2. __name__
作用
python没有入口函数的概念,可以通过__name__
的功能
def sum(m,n):
return m+n
if __name__ == '__main__':
a = 10
b =20
result = sum(a,b)
print(result)
主程序的代码放在if __name__ == '__main__':
里。这样当前模块即可以独立测试运行,也可以被其他文件导入使用。如果不添加此if
判断,别的地方导入当前文件模块时,会运行一些不需要的代码。
4. 包 package
包就是个文件夹,用来放模块的,限定了模块的命名空间
4.1. 包的作用
- 用来管理模块的
- 让业务更清晰化
- 解决一些命名的问题
network包:可以用来管理网络访问
cart模块中,可以提供购物车的增删改查功能
product中,可以提供商品的查看功能
user模块中,可以提供登录,注册等功能
storage包:可以用来管理本地存储
cart模块中,可以提供购物车存储功能
product中,可以提供商品存储功能
user模块中,可以提供用户信息存储功能
4.2. 引入包中模块的功能方法一
import 包名.模块名
import pkg.hello
#访问模块中的属性
print(pkg.hello.name)
#访问模块中的函数
pkg.hello.say()
#访问模块中的类
nice = pkg.hello.Nice()
4.3. 引入包中模块的功能方法二(推荐)
from pkg import hello
#访问模块中的属性
print(hello.name)
#访问模块中的函数
hello.say()
#访问模块中的类
nice = hello.Nice()
4.4. 引入包中模块的功能方法三(推荐)
from pkg.hello import name
from pkg.hello import say
from pkg.hello import Nice
#访问模块中的属性
print(name)
#访问模块中的函数
say()
#访问模块中的类
nice = Nice()
4.5. 引入包中模块的功能方法四
from pkg.hello import *
#访问模块中的属性
print(name)
#访问模块中的函数
say()
#访问模块中的类
nice = Nice()
二、系统的内置模块
1. sys模块
sys.argv
获得启动时的参数sys.path
获取加载的环境sys.exit()
程序退出
2. time模块
time
模块,包含和时间相关信息
time.time()
获取当前时间戳,单位是秒,(相对于1970年1月1日的0点0时0分0秒)
import time
result = time.time() # 获取当前时间
print(result)
time.sleep(秒)
阻断程序
import time
# print('程序开始')
# 睡眠3秒钟
time.sleep(3)
# print('程序结束')
3. datetime模块
datetime
获取日期
datetime.datetime.now().year
datetime.datetime.now().month
datetime.datetime.now().day
import datetime
# 获取当前年
year = datetime.datetime.now().year
# 获取月
month = datetime.datetime.now().month
# 获取日期
day = datetime.datetime.now().day
print(year)
print(month)
print(day)
# 格式化日期时间
now = datetime.datetime.now()
str_time = datetime.datetime.strftime(now, "%Y-%m-%d %H:%M:%S")
4. 计算排序
aaa = [2, 4, 1, 2, 3, 6]
# 列表最大值
print(max(aaa))
# 列表最小值
print(min(aaa))
# 列表和
print(sum(aaa))
# 列表长度
print(len(aaa))
# 列表排序
print(sorted(aaa))
# 列表倒序
print(sorted(aaa, reverse=True))
5. math模块
math
是数学相关的库
math.pow 求幂
math.floor 取下
math.ceil 取上
round 四舍五入
math.sin cos tan…
import math
# 幂
print(math.pow(10, 2))
# 向下取整
print(math.floor(1.8234234234234))
# 向上取整
print(math.ceil(1.1234234234234))
# 四舍五入
print(round(1.6234234234234))
# sin 传入弧度值 pi 3.14 180度
print(math.sin(1.57))
5. random模块
random
主要用来产生随机数
random.randint(start,end) # 随机整数,[start,end]
random.random() # 随机浮点数, [0,1)
random.uniform(start,end) # 随机浮点数, [start,end]
random.choice([]) # 随机数组, 返回单个元素
random.choices([]) # 随机数组, 返回列表
import random
# 随机整数
print(random.randint(10, 20))
# 随机小数 [0, 1)
print(random.random())
# 随机浮点类型数据
print(random.uniform(1.3, 8.5))
# 从列表中随机获取元素
lst = [10,20,30]
print(random.choice(lst))
# 随机返回列表 返回单个元素的列表
print(random.choices(lst))