包的具体使用
| 虽然python3对包的要求降低了 不需要 |
| __init__.py 也可以识别 但是为了兼容性考虑最好还是加上__init.py |
| |
| 1.如果只想用包中某几个模块 那么还是按照之前的导入方式即可 |
| from aaa import md1, md2 |
| 2. 如果直接导入包名 |
| import aaa |
| 导入包名其实就是导包下面的__init__.py文件 该文件内有什么名字 就可以通用包名点什么名字 |
编程思想的转变
| """ |
| 1.面条版阶段 |
| 所有代码全部堆叠再一起 |
| 2.函数版阶段 |
| 根据功能的不同封装不同的函数 |
| 3.模块版阶段 |
| 根据功能的不同拆分成不同的py文件 |
| """ |
| |
| """ |
| 第一个阶段可以看成是直接将所有的数据放在C盘 |
| 视频 音频 文本 图片 |
| 第二个阶段可以看成是将C盘下的数据分类管理 |
| 视频文件夹 音频文件夹 文本文件夹 图片文件夹 |
| 第三个阶段可以看成是将C盘下的数据根据功能的不同划分到更合适的位置 |
| 系统文件夹 C盘 |
| 视频文件夹 D盘 |
| 图片文件夹 E盘 |
| ps:类似于开公司(小作坊 小公司 上市公司) |
| 为了资源的高效管理 |
| """ |
| |
软件开发目录规范
| 1.文件及目录的名字可以变换 但是思想似乎不变的分类的管理 |
| 2.目录规范主要规定开发程序的过程中 针对不同的文件功能需要做不同的分类 |
| |
| |
| 1.bin文件夹 主要存放项目启动文件 |
| start.py 启动文件可以放在bin目录下 也可以直接在项目根目录 |
| |
| 2.conf文件夹 主要存放项目配置文件 |
| settings.py 里面存放项目的默认配置 一般都是全大写 |
| |
| 3.core文件夹 主要存放项目核心文件 |
| src.py 里面放在项目核心功能 |
| |
| 4.interface文件夹 主要存放项目接口文件 |
| goods.py 根据具体业务逻辑划分对应的文件 |
| userpy account.py |
| |
| 5.db文件夹 主要存放项目相关数据、 |
| userinfo.txt |
| db_handler.py 存放数据库操作相关的代码 |
| |
| 6.log文件夹 主要存放项目日志文件 |
| log.log |
| |
| 7.lib文件夹 主要存放项目公共功能 |
| common.py |
| |
| 8.readme文件 主要存放项目相关说明 |
| |
| 9.requirements.txt文件 主要存放项目所需要模块及版本 |
常见内置模块之collections模块
collections模块简介
| 1.namedtuple:生成可以使用名字来访问元素内容的tuple |
| 2.deque:双端队列,可以快速的从另一侧追加和推出对象 |
| 3.Count: 计数器,主要用于计数 |
| 4.OrderedDict: 有序字典 |
| 5.defaultdict:带有默认值的字典 |
nametuple 具名元组
| 1.具名元组:namedtuple |
| from collections import namedtuple |
| """ |
| Python标准库collections中定义了具名元组(namedtuple)工厂函数,它可以构建带字段名的元组。 |
| """ |
| point = namedtuple('点', ['x', 'y', 'z']) |
| p1 = point(1,2,3) |
| print(p1) |
| |
| 内部元素都是字符串的列表或元组; |
| |
| 例如['商品','单价','数量']或 ('商品','单价','数量') |
| |
| 以英文逗号','分隔的长字符串。字段名必须符合以下规则: |
| |
| 例如'商品,单价,数量' |
| from collections import namedtuple |
| point = namedtuple('衣服', ['单价','数量']) |
| p1 = point('190','35') |
| print(p1) |
| |
| card = namedtuple('扑克牌', ['num', 'color']) |
| c1 = card('A', '黑桃') |
| c2 = card('A','红桃') |
| print(c1, c2) |
| |
| |
| |
| 2.队列 |
| 队列与堆栈 |
| 队列:先进先出 |
| 堆栈:先进后出 |
| |
| |
deque的用法
| """ |
| 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。 |
| deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈 |
| """ |
| from collections import deque |
| |
| q = deque(['wei','jason','kevin','daniel']) |
| q.append('彭于晏') |
| print(q) |
| q.appendleft('python3') |
| print(q) |
| |
| """ |
| deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。 |
| """ |
| q.pop() |
| q.popleft() |
| print(q) |
| |
OrderdDict用法
| '使用dict时,key是无序的。在对dict做迭代时,我们无法确定key的顺序。' |
| 如果需要保持Key的顺序, 就可以用到OrderdDict: |
| 使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。 |
| 如果要保持Key的顺序,可以用OrderedDict: |
| |
| d = dict([('name', 'wei'), ('age', '20'), ('sex', 'male'), ('id', '12345679')]) |
| print(d) |
| |
| '-------------------------------' |
| od = OrderedDict([('name', 'wei'), ('age', '20'), ('sex', 'male'), ('id', '12345679')]) |
| print(od) |
| |
| print(od['name']) |
| |
| 'OrderdDict的key会按照插入顺序排列,不是key本身排序' |
| form collections import OrderDict、 |
| |
| od = OrderedDict() |
| od['name'] = 'wei' |
| od['age'] = 20 |
| od['work'] = '大明星' |
| od['id'] = 12345678 |
| print(od.keys()) |
defaultdict的用法
| 有如下值集合 [16, 26, 46, 36, 66, 56, 76, 86, 96, 6…],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 |
| 即: {‘k1’: 大于66 , ‘k2’: 小于66} |
| |
| l1 = [16, 26, 46, 36, 66, 56, 76, 86, 96, 6…] |
| d1 = {'k1':[],'k2':[]} |
| for i in l1: |
| if i > 66: |
| if i in d1: |
| break |
| else: |
| d1['k1'].append(i) |
| if i < 66: |
| if i in d1: |
| break |
| else: |
| d1['k2'].append(i) |
| |
| print(my_dict) |
方法二:defaultdict字典解决方法
| from collections import defaultdict |
| |
| l1 = [16, 26, 46, 36, 66, 56, 76, 86, 96, 6…] |
| |
| d1 = defaultdict(list) |
| for i in l1: |
| if i > 66: |
| d1['k1'].append(i) |
| else: |
| d1['k2'].append(i) |
| |
| |
| '使用dict时,如果引用的key不存在,就会抛出KeyError。如果希望key不存在,返回一个默认值,就可以使用defaultdict' |
| |
| from collections import defaultdict |
| |
| d = defaultdict(lambda: 'N/A') |
| d['name'] = 'wei' |
| d['name'] |
| |
| print(d['age']) |
Counter的用法
| """ |
| Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数) |
| """ |
| from collections import Counter |
| cnt = Counter() |
| for word in ['red', 'blue', 'red','green','blue','blue']: |
| cnt[word] += 1 |
| print cnt |
| |
| 其他内容详细:https://www.cnblogs.com/Eva-J/articles/7291842.html |
| |
常见内置模块之时间模块
| import time |
| """ |
| 三种表现形式 |
| 1.时间戳 |
| 秒数 |
| 2.结构化时间 |
| 主要是给计算机看的 人看的不适应 |
| 3.格式化时间 |
| 主要是给人看的 |
| """ |
| print(time.time()) |
| print(time.localtime()) |
| |
| print(time.strftime('%Y-%m_%d')) |
| |
| |
| |
| time.sleep(10) |
| |
| import datetime |
| print(datetime.datetime.now()) |
| print(datetime.datetime.today()) |
| print(datetime.date.today()) |
| ''' |
| datetime 年月日 时分秒 |
| date 年月日 |
| time 时分秒(后续会有此规律) |
| ''' |
| |
| from datetime import date, datetime |
| print(date.today()) |
| print(datetime.today()) |
| print(datetime.utcnow()) |
| import datetime |
| c = datetime.datetime(2017, 5, 23, 12, 20) |
| print('指定日期:', c) |
| |
| d = datetime.strptime('2017/9/30', '%Y/%m/%d') |
| print(d) |
| 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) |
| |
| |
| |
| |
| |
| import datetime |
| ctime = datetime.date.today() |
| print(ctime) |
| time_del = datetime.timedelta(days=3) |
| print(ctime + time_del) |
| print(time_del) |
| |
| ctime = datetime.datetime.today() |
| print(ctime) |
| time_del = datetime.timedelta(minutes=20) |
| print(ctime + time_del) |
常见内置模块之随机数模块
| import random |
| print(random.random()) |
| print(random.randint(1, 6)) |
| print(random.randrange(1, 100, 2)) |
| |
| print(random.choice(['一等奖', '二等奖', '三等奖', '谢谢惠顾'])) |
| |
| print(random.sample(['jason', 'kevin', 'tony', 'oscar', 'jerry', 'tom'], 2)) |
| |
| random.shuffle(l1) |
| print(l1) |
| |
| |
| ''' |
| 产生图片验证码: 每一位都可以是大写字母 小写字母 数字 4位 |
| ''' |
| def get_code(n): |
| code = '' |
| for i in range(n): |
| |
| random_upper = chr(random.randint(65, 90)) |
| random_lower = chr(random.randint(97, 122)) |
| random_int = str(random.randint(0, 9)) |
| |
| temp = random.choice([random_upper, random_lower, random_int]) |
| code += temp |
| return code |
| |
| res = get_code(10) |
| print(res) |
| res = get_code(4) |
| print(res) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构