ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python学习Day23

2022-07-15 00:00:23  阅读:140  来源: 互联网

标签:文件 python py 导入 Day23 学习 文件夹 模块 import


Day 23

今日内容概要

  • 绝对导入与相对导入
  • 包的概念
  • 编程思想的转变
  • 软件开发目录规范
  • 常见内置模块

今日内容详细

1.绝对导入与相对导入
#只要涉及到模块的导入 那么sys.path永远以执行文件所在的路径为准

image

以上解决办法有两种
1)把cc文件夹路径添加到sys.path路径中(通用方法 什么时候都可以用)
2)在bb模块中把import bb改为from cc import bb(该方法就是绝对导入)
1.绝对导入:
	就是以执行文件所在的sys.path为起始路径 往下一层层查找
    如果是文件名嵌套文件名,则需要在文件名后加点和内层文件名
    from cc.dd.ee import bb
   ps: 由于pycharm会自动将项目根目录添加到sys.path中,所以查找模块肯定不报错的方法就是永远从根路径往下层层查找
        如果不是用pycharm运行(cmd) 则需要将项目根目录添加到sys.path路径中(有模块可以帮助我们获取根目录的绝对路径'os模块')
2.相对导入:
	储备知识:
		.在路径中是当前路径
    	..在路径中是上一层路径
    	../..在路径中是上上一层路径
  	相对导入可以不参考执行文件所在的路径 直接以当前模块文件路径为准
  eg:
	from . import b #在执行文件中输入该代码则是在当前路径查找b
    
  相对导入的缺陷:
    1)只能在模块文件中使用 不能再执行文件中使用
    2)相对导入在项目较复杂的情况下可能会出错
     #能少用相对导入就少用 建议使用绝对导入
2.包的概念
Package:包
    
1.包是什么?
	专业角度:内部含有__init__.py文件的文件夹就叫包
	直观角度:就是一个文件夹
2.包的作用是什么?
	内部存放多个py模块文件,仅仅是为了更方便管理模块文件
3.具体使用
	import 包名
    导入包名起始导入的是里面的__init__.py文件,该文件里有什么才能用什么,如果里面什么都没有那也是白导
    也可以跨过__init__.py 直接用from 包名 import 模块,模块
  '''
  针对python3解释器 文件夹里有没有__init__.py无所谓,都是包
  针对python2解释器 文件夹里必须有__init__.py才能叫做包
  
  最好加上,为了适应多个版本解释器
  '''
3.编程思想的转变
1.小白阶段
	按照需求从上往下堆叠代码     单文件
2.函数阶段
	将代码按照功能的不同封装成不同的函数     单文件
3.模块阶段
	根据功能的不同拆分不同的模块文件    多文件
    
'''
小白阶段相当于将所有的文件全部存储在c盘且不分类
函数阶段相当于将所有的文件在c盘下分类
模块阶段相当于将所有文件按照功能的不同分类到不同盘中

目的是为了更加方便快捷高效的管理资源
'''
4.软件开发目录规范
针对上述第三个阶段 模块文件多了之后还需要有文件夹
所有程序目录都有一些规范(有多个文件夹)

1.bin文件夹
	用于存储程序的启动文件  start.py
2.conf文件夹
	用于存储程序的配置文件  settings.py
3.core文件夹
	用于存储程序的核心逻辑  src.py
4.lib文件夹
	用于存储程序的公共功能(很多文件都要用的)  common.py
5.db文件夹(可被数据库替代)
	用于存储程序的数据(用户核心数据)  userinfo.txt
6.log文件夹(可被日志服务替代)
	用于存储程序的日志文件(类似监控)  log.log
7.interface文件夹
	用于存储程序的接口文件(核心逻辑太多需分层)  user.py order.py goods.py
8.readme文件(文本文件)
	用于编写程序的说明、介绍、广告 类似说明书
9.requirements.txt文件
	用于存储程序所需的第三方模块名称和版本
    
'''
编写程序时可以不完全遵循以上文件名
	start.py可以放在bin文件夹下也可以放在项目根目录中
	db文件夹以后会被数据库软件替代
	log文件夹会被专门的日志服务替代
'''
5.常见内置模块
1.collections模块
	给我们提供了更多数据类型
  1.1.具名元组(含有名字的元组) namedtuple
    from collections import namedtuple
    point=namedtuple('二维坐标系',['x','y'])
    res1=point(1,2)
    res2=point(10,12)
    print(res1,res2)#二维坐标系(x=1, y=2) 二维坐标系(x=10, y=12)
    print(res1.x)#1
    print(res2.y)#12
  ——————————————————————————————————————————————
	from collections import namedtuple
	point=namedtuple('三维坐标系',['x y z'])
	res1=point(1,2,4)
    res2=point(10,12,25)
    print(res1,res2)#三维坐标系(x=1,y=2,z=4) 三维坐标系(x=10,y=12,z=25)
    
    
    eg: 简单扑克牌
    from collections import namedtuple
    p=namedtuple('扑克牌',['花色','点数'])
    res1=p('♥','A')
    res2=p('♠','A')
    print(res1)#扑克牌(花色='♥', 点数='A')
    print(res2)#扑克牌(花色='♠', 点数='A')
    
  1.2.双端队列 deque
    from collections import deque
    q = deque()
    q.append(111)
    q.append(222)
    q.appendleft(555)#头部追加
    print(q)#deque([555, 111, 222])
    
  1.3.有序字典  OrderedDict
    from collections import OrderedDict
    od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(od)#OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    
  1.4.默认字典  defaultdict
    #有如下值集合 [11,22,33,44,55,66,77,88,99,90],
    # 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
    # {'k1':[], 'k2':[]}

    from collections import defaultdict
    res = defaultdict(k1=[],k2=[])
    print(res)#defaultdict(None, {'k1': [], 'k2': []})
    
  1.5.计数器 Counter
	eg:循环统计个字母出现的次数
    res = 'abcdeabcdabcaba'  
  方式1:
    new_dict = {}
    for i in res:
        if i not in new_dict:
            new_dict[i] = 1
        else:
            new_dict[i] += 1
    print(new_dict)
  方式2:
    from collections import Counter
    res1 = Counter(res)
    print(res1)
    
2.时间模块之time模块
	时间的三种格式
    1.时间戳	time.time()
    2.结构话时间		time.gmtime()
    3.格式化时间		time.strftime('%Y-%m-%d %H:%M:%S')
      %Y 年    %m 月   %d日
      %H 时    %M 分   %S秒  或  %X(%X就是时分秒)
作业:
1.整理今日内容及笔记
2.熟悉软件开发目录规范
	尝试将之前的编程大题用软件开发目录规范去套
3.预习明日内容

标签:文件,python,py,导入,Day23,学习,文件夹,模块,import
来源: https://www.cnblogs.com/Oreoxx/p/16479822.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有