python-模块(2)

学习内容概览

  • 绝对导包与相对导包
  • 包的简介
  • 软件开发目录规范
  • 常见模块

一、绝对导包与相对导包

导包的过程中,路径都是以执行文件为基准
绝对导包与相对导包类似于之前学习的绝对路径与相对路径

  • 绝对导包:
    以项目根目录开始,使用from一层层找到模块所在的文件夹,然后使用import导入(pycharm帮我们在sys.path中添加了项目根目录的路径,如果没有使用pycharm则需要自行添加)
  • 相对导包:
    根据当前执行文件所在位置,使用from . 代表当前目录;from …代表上级目录来找到模块文件与之导入文件的相对路径(相对路径只能在模块文件中使用,不能在执行文件中使用)

二、包的简介

  • 什么是包
    文件夹中含有__init__.py的文件夹就是一个包
    对于python3来说,只要是文件夹都可以当做是包
    但对于python2来说,只有含有__init__的文件夹才是包
  • 包的作用
    存放多个py文件(模块文件),用于分门别类
  • 包的用法
    import 包名
    """
    可以直接使用import导入一个包
    不过这样直接导入的不是包内所有的模块文件,而是导入了包内的__init__文件
    可以在__init__文件中导入模块,就可以使用  包名.模块名.名字  的方式来调用
    这样也可以像__all__一样,可以控制导入哪些包
    """
    from 包名 import 模块名
    """
    也可以直接跳过包,直接导入包内的模块
    """
    

三、软件开发目录规范

学习了模块过后,以后就需要习惯把不同功能的代码放在不同的文件夹下
而我们使用的所有程序目录都有一定规范

  1. bin文件夹
    用于存放程序的启动文件 start.py
  2. conf文件夹
    用于存放程序的配置文件 settings.py
  3. core文件夹
    用于存放程序的核心功能 src.py
  4. lib文件夹
    用于存放程序的公共功能 common.py
  5. db文件夹
    用于存放程序的数据文件 info.txt
  6. log文件夹
    用于存放程序的日志信息 log.log
  7. interface文件夹
    用于存放程序的接口文件 user.py order.py goods.py
  8. readme文件
    相当于程序的说明书,写入产品介绍、联系方式、广告等
  9. requirements.txt
    在内部填写程序运行需要的环境,需要哪些模块、软件,需要什么版本

在编写文件名时,可以不用完全按照上边的名字
也可以不用bin文件夹,将启动文件直接放在项目根目录下

四、常见内置模块

collections模块

提供了更多的数据类型

  • 具名元组

    from collections import namedtuple
    coord = namedtuple('坐标', ['x', 'y'])
    # coord = namedtuple('坐标', 'x y')  # 也可以在一个字符串中使用空格来分割两个数据,这里和上边代码相同
    res = coord('4', '9')
    print(res)  # 坐标(x=4, y=9)
    """可以在元组的前面加上一个字符串信息"""
    
  • 双端队列

    from collections import deque
    res = deque()
    print(res)  # deque([])
    res.append(1)
    res.append(2)
    res.append(3)
    print(res)  # deque([1, 2, 3])
    """
    队列的特性是先进先出
    而双端队列两端都可以增加和移除数据
    """
    res.appendleft(4)
    print(res)  # deque([4, 1, 2, 3])
    res.pop()
    print(res)  # deque([4, 1, 2])
    res.popleft()
    print(res)  # deque([1, 2])
    
  • 有序字典

    from collections import OrderedDict
    """
    字典在python3.6之前是无序列表
    可以使用这个模块生成有序字典
    """
    d1 = dict([('a',1), ('b', 2)])
    print(d1)
    d2 = OrderedDict([('a', 1), ('b', 2)])
    print(d2)
    
  • 默认字典

    from collections import defaultdict
    """可以先看做一种构建字典的方式"""
    d1 = defaultdict(k1=[], k2=[])
    print(d1)  # defaultdict(None, {'k1': [], 'k2': []})
    
  • 计数器

    from collections import Counter
    res = 'asdfzxcvfdasvczx'
    """之前写的统计每个字符出现次数使用了for循环和if判断"""
    d1 = {}
    for i in res:
    	if i in d1:
    		d1[i] += 1
    	else:
    		d1[i] = 1
    print(d1)  # {'a': 2, 's': 2, 'd': 2, 'f': 2, 'z': 2, 'x': 2, 'c': 2, 'v': 2}
    """现在使用内置模块可以很方便的拿到结果"""
    d2 = Counter(res)
    print(d2)  # Counter({'a': 2, 's': 2, 'd': 2, 'f': 2, 'z': 2, 'x': 2, 'c': 2, 'v': 2})
    

time模块

时间模块有三种格式
1. 时间戳:time.time(),返回值是从1970年1月1号0时0分0秒到执行时经过的秒数
2. 结构化时间:time.gmtime(),返回值是方便计算机识别的时间元组
3. 格式化时间:strftime(),返回值是方便我们看的时间
时间戳和格式化时间不能相互转换,需要经过结构化时间转换
在这里插入图片描述

  • 格式化时间

    import time
    """
    格式化时间需要使用格式化符号
    几个比较常见的符号:
    %Y 年	%m 月	%d 日
    %H 时	%M 分	%S 秒
    %x 本地相应的日期
    %X 本地相应的时间
    """
    res = time.strftime('%Y-%m-%d %H:%M:%S')
    print(res)	# 2022-07-14 19:39:32
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值