包的概念、开发目录规范、常见内置模块知识合集
一、包的具体使用
1.什么是包
包就是内部含有__init__文件的文件夹,该文件夹可包含多个模块文件,包也可以理解为管理多个模块文件的文件夹
2.包有什么用
包的作用就是包含多个模块,例如我们下载第三方模块numpy时,模块下会产生一个numpy文件夹,里面包含了numpy管理的多个模块
3.使用
eg:
from demo import a,b
# 导入包名就是导入里面的__init__文件,该文件内有什么名字就可以通过包名点什么名字使用
在Python解释器中,包文件夹内有没有__init__.py文件已经不重要了,但是在Python2中解释器中文件夹必须用__init__.py文件才能当做一个包,不然他只是一个文件
二、编程思想的转变
目前会经历的三个阶段:
1.小白阶段
懂得不多,写代码的时候只会像面条一样从上往下的逻辑写,全部堆在一起
2.函数阶段
有了一点的函数思维了,根据功能封装不同的函数,然后进行调用
3.模块阶段
能够应用别人的东西写简洁的代码,根据功能的不同拆分成不同的py文件
三、软件开发目录规范
为什么要规范文件目录?
为了程序的可读性和可维护性,当我们吧项目文件进行分类之后大大提高了后期的维护和查看,只需要到对应的文件夹名下找到具体的文件进行查看就好了
文件名 |
作用 |
写法 |
bin文件夹 |
用于存放项目的启动文件 |
start.py |
conf文件夹 |
用于存放配置文件 |
setting.py |
core文件夹 |
用于存放核心逻辑文件 |
src.py |
db文件夹 |
用于存放数据文件 |
userinfo.py |
lib文件夹 |
用于存放程序的公共功能文件 |
common.py |
log文件夹 |
用于存放日志文件 |
log.log |
interface文件夹 |
用于存放接口文件 |
user.py/order.py |
readme文件夹 |
用于存放项目的说明书 |
/ |
requirements文件夹 |
用于存储程序所需的第三方模块名和版本 |
requirements.txt |
四、常见内置模块之collections
1.具名元组namedtuple
from collections import namedtuple
point = namedtuple('坐标系',['x','y'])
res = point(99,66)
print(res) # 坐标系(x=99, y=66)
print(res.x) # 99
from collections import namedtuple
card = namedtuple('扑克牌', ['num', 'color'])
c1 = card('J', '红♠')
c2 = card('K', '黑♥')
print(c1, c1.num, c1.color) # 扑克牌(num='J', color='红♠') J 红♠
print(c2, c2.num, c2.color) # 扑克牌(num='K', color='黑♥') K 黑♥
2.双端队列deque
from collections import deque
a = deque()
a.append(11)
a.append(22)
a.appendleft(999)
print(a) # deque([999, 11, 22])
队列与堆栈:
队列:先进先出
堆栈:先进后出
3.有序字典OrderedDict
from collections import OrderedDict
d = dict([('a',1),('b',2),('c',3)])
print(d) # {'a': 1, 'b': 2, 'c': 3}
od = OrderedDict([('a',1),('b',2),('c',3)])
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
4.计数Counter
from collections import Counter
res = 'ahhgggasdggdhhdsgcsxshshhsggahaaaa'
res1 = Counter(res)
print(res1)
# Counter({'h': 8, 'g': 8, 'a': 7, 's': 6, 'd': 3, 'c': 1, 'x': 1})
五、常见内置模块之时间模块
1.常见时间格式化符号
符号 |
属性 |
%y |
表示年份(00-99) |
%m |
表示月份(1-12) |
%d |
表示一年中的天数(1-31) |
%H |
表示24小时制的时数(0-24) |
%I |
表示12小时制的时数(0-12) |
%M |
表示分钟(0-59) |
%S |
表示秒数(0-59) |
%w |
表示星期几 |
%X |
表示当地的日期表示 |
2.时间戳
时间戳表示从1970-1-1-0时到现在经过了多长时间
import time
now = time.time()
print(now) # 1666168383.992469
print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=16, tm_min=33, tm_sec=3, tm_wday=2, tm_yday=292, tm_isdst=0)
print(time.strftime('%Y-%M-%d')) # 2022-10-19
print(time.strftime('%Y-%M-%d %H:%M:%S')) # 2022-10-19 16:35:16
print(time.strftime('%Y-%M-%d %X')) # 2022-10-19 16:35:16
# strftime格式化时间
3.格式化时间
from datetime import
d=datetime.strptime('2017/9/30','%Y/%m/%d')
print(d) # 2017-09-30 00:00:00
e=datetime.strptime('2017年9月30日星期六','%Y年%m月%d日星期六')
print(e)
f=datetime.strptime('2017年9月30日星期六8时42分24秒','%Y年%m月%d日星期六%H时%M分%S秒')
print(f)
# strptime 按照特定时间格式将字符串转换为时间类型
六、常见内置模块之随机数模块
产生图片验证码
def get_code(n):
code = ''
for i in range(n):
range_upper = chr(random.randint(65,90))
range_lower = chr(random.randint(97,122))
range_int = str(random.randint(0,9))
temp = random.choice([range_upper,range_lower,range_int])
code += temp
return code
res = get_code(5)
print(res) # 9UhL6