一、包的使用

1、什么是包

  • 指含有多个py文件的集合
  • 指内部含有__ init__ .py文件的文件的文件夹
    • 在py3中,即使没有init.py的文件,也能识别出是包

2、包的具体使用

引言:虽然在py3中文件夹内没有含有__ init __ .py也可以识别,但是考虑到兼容性的问题,建议还是在文件夹中加上 __ init __ .py

1、常规导入

  • 如果只是想使用包中某几个模块,只需按照常规from...import...的导入方式使用即可

2、直接导入包名

  • 使用import的方式直接导入包名

    代码表现:

    ​ import 包名

    这种方式导入的是包内__ init __ .py文件,通常包的开发人员会将包内模块名导入到这个文件中去,我们只需要通过’包‘点_'_ init __'点''模块名''的方式调用

二、编程思想转变

引言:在前面学习python过程中我们所写的代码都是在一个py文件中,再往后的日程里,我们将以新的方式来编写代码,通过将不同文件类型区分开来,划分出不同的文件夹,来往正式的程序开发中迈进

1、面条阶段

  • 所有代码在一个py文件中,叠放在一起

2、函数阶段

  • 根据功能的不同,封装不同的函数

3、模块阶段

  • 根据功能的不同来拆分成不同的py文件

三、软件目录开发规范

引言:为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要,简而言之就是把软件代码分文件目录,做到可读性强,可维护性高

1、bin

  • bin 主要用来存放项目启动文件

    • start.py 启动文件可以存放在这个文件夹内,也可以直接存放在项目根目录下

2、conf

  • conf 主要用来存放项目配置文件

    • settings.py 存放项目的默认配置,这里的文件一般全是大写

3、core

  • core 主要用来存放项目的核心功能文件

    • src.py 项目核心功能文件

4、interface

  • interface 主要用来存放项目接口类文件,根据具体业务逻辑划分文件

    • goods、user、account 等文件

5、db

  • db 主要用来存放数据相关的文件(用户信息、用户账号)

    • userinfo、db_handler 等文件

6、log

  • log 主要用来存放项目日志类型文件(项目运行情况)

    • log.log

7、lib

  • lib 主要用来存放项目公共功能等文件

    • common.py

8、readme

  • readme 主要用来存放项目的使用说明和一些介绍

9、requirements

  • requirements 主要用来存放项目所需的模块和版本

四、常用内置模块

1、collections模块

1.具名元组

关键词:namedtuple(可迭代对象,导入的序列)

作用:可生成具体名称元组

代码用法:

  1. 导入模块:
  2. from collections import namedtuply
  3. 用法一:表示二位坐标
  4. point = namedtuple('坐标', ['x', 'y'])
  5. p1 = point(1, 2)
  6. print(p1)
  7. print(p1.x)
  8. print(p1.y)
  9. -------------------------------------------------------------------------------------
  10. 坐标(x=1, y=2)
  11. 1
  12. 2
  13. 用法二:表示扑克牌
  14. card = namedtuple('扑克牌', ['num', 'color'])
  15. c1 = card('A', '黑')
  16. c2 = card('A', '红')
  17. print(c1, c1.num, c1.color)
  18. print(c2, c2.num, c2.color)
  19. -----------------------------------------------------------------------------
  20. 扑克牌(num='A', color='黑') A
  21. 扑克牌(num='A', color='红') A

2.双端队列

关键词:deque(可迭代对象,最大数据值)

作用:可生成双向列表,返回一个新的双向队列对象,从左到右初始化(用方法 append()) ,从 iterable (迭代对象) 数据创建。如果 iterable 没有指定,新队列为空。

代码用法:

  1. 导入模块:
  2. from eollections import deque
  3. 用法:
  4. q = deque(['a', 'b', 'c'], maxlen=10)
  5. # 从右边添加一个元素
  6. q.append('d')
  7. print(q) # deque(['a', 'b', 'c', 'd'], maxlen=10)
  8. # 从左边删除一个元素
  9. print(q.popleft()) # a
  10. print(q) # deque(['b', 'c', 'd'], maxlen=10)
  11. # 扩展队列
  12. q.extend(['i', 'j'])
  13. print(q) # deque(['b', 'c', 'd', 'i', 'j'], maxlen=10)
  14. # 查找下标
  15. print(q.index('c')) # 1
  16. # 移除第一个'd'
  17. q.remove('d')
  18. print(q) # deque(['b', 'c', 'i', 'j'], maxlen=10)
  19. # 逆序
  20. q.reverse()
  21. print(q) # deque(['j', 'i', 'c', 'b'], maxlen=10)
  22. # 最大长度
  23. print(q.maxlen) # 10

3.默认值字典

关键词:defaultdict

作用:默认字典的功能与dict基本相同,但在访问一个不存在的key时,默认字典会提供一个默认值,而不是引发异常

代码用法:

  1. 导入模块:
  2. from eollections import defauldict
  3. 用法一:
  4. # 使用 list 作为 default_factory ,很容易将序列作为键值对加入字典:
  5. d = defaultdict(list)
  6. s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
  7. for k, v in s:
  8. d[k].append(v)
  9. print(d) # defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
  10. 用法二:
  11. # 设置 default_factory 为 int ,可以很好的用于计数
  12. s = 'mississippi'
  13. d = defaultdict(int)
  14. for k in s:
  15. d[k] += 1
  16. print(d) # defaultdict(<class 'int'>, {'m': 1, 'i': 4, 's': 4, 'p': 2})

4.计数

关键词:Counter

作用:Counter 是一个 dict 的子类,用于计数可哈希对象。

代码用法:

  1. 导入模块:
  2. from eollections import counter
  3. 用法一:统计字符串字符个数
  4. c = Counter()
  5. str_1 = 'sfsadfsdjklgsdla'
  6. for i in str_1:
  7. c[i] += 1
  8. print(c) # Counter({'s': 4, 'd': 3, 'f': 2, 'a': 2, 'l': 2, 'j': 1, 'k': 1, 'g': 1})
  9. c2 = Counter('asfjslfjsdlfjgkls')
  10. print(c2) # Counter({'s': 4, 'd': 3, 'f': 2, 'a': 2, 'l': 2, 'j': 1, 'k': 1, 'g': 1})
  11. 用法二:统计列表相同数据值个数
  12. c = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
  13. print(c) # Counter({'blue': 3, 'red': 2, 'green': 1})

2、time时间模块

在python中,有三种表现时间的结构

1、时间戳:1970年0时0分0秒-到现在的秒速

2、结构化时间:计算机看的,人看不适应

3、格式化时间:主要是表示时间的年月日

1.时间戳

关键词:time

作用:打印一个时间戳

代码用法:

  1. 模块导入:
  2. import time/from time import time
  3. print(time.time()) # 1666170099.7668478

2.结构化时间

关键词:localtime

作用:打印结构化时间

代码用法:

  1. 模块导入:
  2. import time/from time import localtime
  3. print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=4, tm_sec=16, tm_wday=2, tm_yday=292, tm_isdst=0)

3.格式化时间

关键词:strftime

作用:以人能看懂的方式打印时间

​ 需要设置关键字打印相对的时间:

关键词 y m d H M S
对应单词 year month day hour minute sec

代码用法:

  1. 模块导入:
  2. import time/from time import strftime
  3. print(time.strftime('%y/%m/%d')) # 22/10/19
  4. print(time.strftime('%y-%m-%d,%H:%M:%S')) # 22-10-19,17:19:17
  5. print(time.strftime('%y年%m月%d日%H时%M分%S秒')) # 22年10月19日17时19分17秒

4.睡眠

关键词:sleep

作用:代码执行到此处时,可以设置暂停执行的时间

代码用法:

  1. 模块导入:
  2. import time/from time import sleep
  3. time.sleep(10)
  4. print('怎么还没到我~') # 代码将在10秒后打印

5.datetime类

代码用法:

  1. 导入模块:
  2. import datetime
  3. print(datetime.datetime.today()) # 2022-10-19 18:22:06.371652
  4. print(datetime.datetime.now()) # 2022-10-19 18:24:13.345563
  5. print(datetime.date.today()) # 2022-10-19

3、随机模块

1.随机产生小数

关键词:random

作用:随机产生一串小数

代码用法:

  1. 导入模块:
  2. import random
  3. print(random.random) # 0.927037923859868

2.随机产生整数

关键词:randint

作用:随机产生整数,可设置区间

代码用法:

  1. 导入模块:
  2. import random
  3. print(random.randint(1,10)) # 89

3.随机产生整数

关键词:randrange

作用:随机产生整数,可设置区间,步长

代码用法:

  1. 导入模块:
  2. import random
  3. print(random.randint(1,10,5)) # 25

5.随机抽取样本

关键词:choice

作用:在数据库中随机抽取一个样本

代码用法:

  1. 导入模块:
  2. import random
  3. l1 = [5, 7, 9, 12, 15]
  4. print(random.choices(l1)) # 5 返回数据值本身
  5. print(random.choices(l1)) # [5] 以数据的原本类型返回

6.随机抽取多个样本

关键词:sample

作用:在数据库中随机抽取多个样本,可指定数量

代码用法:

  1. 导入模块:
  2. import random
  3. l1 = [5, 7, 9, 12, 15]
  4. print(random.sample(l1, 3)) # [5, 7, 12]

补充:面试题

随机生成四位含有大小写英文和数字的验证码

  1. import random
  2. def get_code(n):
  3. code = ''
  4. for i in range(n):
  5. upper_ = (chr(random.randint(65.90)))
  6. lower_ = (chr(random.randint(97,122)))
  7. random_int = str(random.randint(0,9))
  8. temp = random.choice([upper_, lower_, random_int])
  9. code += temp
  10. return code
  11. res = get_code(4)
  12. print(code)
  13. ----------------------------------------------------------------------
  14. zd6K

Python基础之模块:2、包的使用和软件开发目录规范及常用内置模块的更多相关文章

  1. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  2. python基础语法10 函数递归,模块,软件开发目录规范

    函数递归: 函数递归指的是重复 “直接调用或间接调用” 函数本身, 这是一种函数嵌套调用的表现形式. 直接调用: 指的是在函数内置,直接调用函数本身. 间接调用: 两个函数之间相互调用间接造成递归. ...

  3. python模块导入-软件开发目录规范-01

    模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...

  4. py 包和模块,软件开发目录规范

    目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...

  5. Python模块:Re模块、附软件开发目录规范

    Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ”   #  默认匹配除 ...

  6. python 之 软件开发目录规范 、logging模块

    6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序   core src.py,程序核心功能代码   conf settings. ...

  7. Python 浅谈编程规范和软件开发目录规范的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...

  8. python浅谈编程规范和软件开发目录规范的重要性

    前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...

  9. Python记录13:软件开发目录规范

    软件开发目录规范 开发一个软件,一个工程项目,一般应该具备以下的几个基本的文件夹和模块,当然,这并不是一成不变的,根据项目的不同会有一定的差异,不过作为一个入门级的新手,建议暂时按照以下的规范编写: ...

随机推荐

  1. Vue3 Transition 过渡效果之基于 CSS 过渡

    介绍 Transistion 路由组件的切换.动态组件的切换.v-if 条件渲染组件以及 v-show 显示组件原本是没有任何过渡(CSS 动画)效果的.然而,Vue 的内置组件<Transit ...

  2. 爬虫简介与excel表格操作

    爬虫简介与excel表格操作 re模块简介 1.在python中使用正则表达式的话那么re模块就是选择之一 import re # 导入re模块 2.在re模块中使用findall找到所有我们给他的值 ...

  3. 说说 JSON 格式的弊端与解决方法

    JSON 格式是目前最流行的数据交互格式,广泛应用于前后端分离的系统.但也有一些场合不适合使用 JSON 格式. 1 JSON 格式弊端 有这样的一个需求:希望把客户端的日志上传到服务器存储起来.原先 ...

  4. 第九章 kubectl命令行工具使用详解

    1.管理k8s核心资源的三种基础方法 陈述式管理方法:主要依赖命令行CLI工具进行管理 声明式管理方法:主要依赖统一资源配置清单(manifest)进行管理 GUI式管理方法:主要依赖图形化操作界面( ...

  5. SpringMVC--从理解SpringMVC执行流程到SSM框架整合

    前言 SpringMVC框架是SSM框架中继Spring另一个重要的框架,那么什么是SpringMVC,如何用SpringMVC来整合SSM框架呢?下面让我们详细的了解一下. 注:在学习SpringM ...

  6. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. Centos7下安装postgresql(tar包形式安装)

    Centos7下安装postgresql(tar包形式安装) 1.官网下载地址: https://www.postgresql.org/ftp/source/ 2.将下载来tar包上传到linux服务 ...

  8. setw()

    setw() 头文件是 #include<iomanip> setw(2)是下一个数据输出宽度为2,超过2则以实际输出为准,不足2补空格.仅对下一个数据的输出有效,即只有一次效果.(set ...

  9. 工具推荐-使用RedisInsight工具对Redis集群CURD操作及数据可视化和性能监控

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x00 快速 ...

  10. YAML资源清单

    YAML 文件基本语法格式 在 Docker 环境下面我们是直接通过命令 docker run 来运行我们的应用的,在 Kubernetes 环境下面我们同样也可以用类似 kubectl run 这样 ...