ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

导入与开发目录规范

2022-07-14 19:34:14  阅读:177  来源: 互联网

标签:调用 导入 规范 tm 模块 time print import 目录


导入与开发目录规范

绝对导入与相对导入

  • 绝对导入

    1.绝对导入其实就是在导入过程中以所执行文件为起始路径来寻找我们需要调用的代码,如果我们在pycharm中导入的
    话pycharm会帮我们直接取到本层或者下层文件中去寻找我们需要去调用的模块或者内容,但是如果是在上层或者其他层
    面中的模块调用的话那么我们就需要使用绝对导入功能,先调用内置模块import sys模块,然后将将调用文件的文件路
    径传输给sys模块那么我们才可以去调用该模块。
    from aaa import new1
    print(new1.name)
    
    import sys
    sys.path.append(r'D:\pythonProject\day23\aaa')
    import new1
    print(new1.name)
    
  • 相对导入

    1.相对导入其实就是不需要参考执行文件的路径直接以模块文件路径为准我们只需要在执行文件中调用模块文件即可,不
    过这样的作法容易出错所以我们一般推荐使用绝对导入
    2.拓展
    		.在路径中意思是当前路径
     		..在路径中意思是上一层路径
     		../..在路径中意思是上上一层路径
    		from . import new1模块文件
            
    		from aaa.bbb.ccc import new1  # pycharm自动修改文件
    		print(new1.name)  # 打印
    

包的概念

  • 包的定义

    1.对包的定义一共有两种
    	一种是在python2.x中文件夹内部必须带有__init__.py文件的才会被认为是包,调用的时候擦可以被调用,
      如果没有的话那么就不认识,我们不熟
    	第二种则是在python3.x中只要是个文件夹并且不管内部带不带__init__文件我们都认为他是一个包,但是
      我们在使用的时候还是比较建议给调用的文件夹中添加一个__init__的py文件,比较符合规范
    	最后包呢其实就是多个py文件放到同一个文件夹中,为了方便管理和调用创造出了一个名词叫做包
    
  • 包的使用方法

1.首先我们要先应该现在包的内部找到__init__文件,然后在内部定义好这个文件同级别调用的模块以供别的执行文件调用
更方便一些例如form . improt xxx, xxx, xxx,然后再经过别的执行文件调用这个包的名字并且调用__init__文件就可
以了

编程思维的转变

  • 开发小白阶段(小辣鸡)

    1.在我们当一个十足的小辣鸡的时候,总是以为唉自己会写代码了还感觉蛮好的,然后就一个简单的程序写个几十行,厉
    害直接从上到下一串写完看起来较为麻烦和繁琐,我们可以成为面条版代码
    
  • 函数编写与调用阶段(辣鸡)

    1.当我们走到函数的阶段的时候我们就可以将一些繁琐的代码封装起来,使代码更简洁,然后复杂程度也高一点了,也可
    以在下方调用我们曾经写过的一些函数体代码,当然了还是个辣鸡嘻嘻
    
  • 模块调用与功能分原处理(入门)

    然后到了我们现在的阶段也就是学习模块的阶段,也是正式开始令人头秃的阶段,我们可以成为梦开始的阶段,当然了是
    噩梦(关于头发的噩梦)要开始来回各个文件之间互相调用,终于入门了
    

软件开发目录规范

  • 目录

    文件夹名称 文件名 文件功能
    bin文件夹 start.py 用来存放程序的启动程序
    conf文件夹 settings.py 用来存储程序的配置型文件
    core文件夹 src.py 用于存放程序的核心逻辑文件
    lib文件夹 common.py 用于存放程序的公共性功能文件
    bd文件夹 userinfo.py 用于存储程序的数据文件
    log文件夹 log.log 用于存放使用该程序的日志文件
    interface文件夹 user.py , order.py , good.py 用于存放各代码之间的接口文件
    readme文本文件 readme.txt 用于编写程序说明、介绍等
    requiremenrs文本文件 requirements.txt 用于存放第三方模块和版本
  • 规范

    1.我们在编写软件的时候 可以不完全遵循上面的文件名,前面的只是一个较为规范的模板,并不是必须强制使用的,只
    要我们的文件名够见名知意其实也可以做到上方那种效果,上方的只是大多数程序员遵守的格式
    	start.py可以放在bin文件夹下也可以直接放在项目根目录
    	db文件夹等我们学到真正的项目会被数据库软件替代
    	log文件夹等我们学到真正的项目会被专门的日志服务替代
    

img

collections模块

  • 模块简介

    1.除内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型、
    Counter、deque、defaultdict、namedtuple和OrderedDict等。
    
  • 模块内置功能之Namedtuple

    1.namedtuple: 生成可以使用名字来访问元素内容的tuple,可以用来表示坐标轴等
    	from collections import namedtuple
    	point = namedtuple('point', ['X', 'Y', 'Z'])
    	p = point(5, 2, 1)
    	print(p)  # point(X=5, Y=2, Z=1)
    	print(p.x, p.y, p.z)  # 5 2 1
    
  • 模块内置功能之Deque

    1.deque: 双端队列,可以快速的从另外一侧追加和推出对象
    	from collections import deque
    	q = deque (['joseph', 'trump', 'alice' 'jon' 'lili'])
    	q.append('zoey')
    	q.appendleft('annabelle')
    	q.append('kayla')
    	print(q)  # deque(['annabelle', 'joseph', 'trump', 'alice', 'jon', 'lili', 'zoey', 'kayla'])
    	q.pop()  # deque(['annabelle', 'joseph', 'trump', 'alice', 'jon', 'lili', 'zoey'])
    	q.popleft()  # deque(['joseph', 'trump', 'alice', 'jon', 'lili', 'zoey'])
    
  • 模块内置功能之Counter

    1.Counter: 计数器,主要用来计数,直接帮我们看出可迭代对象中一共出现了,多少次某个相同的元素并使用字典的
    方式返回
    	from collections import Counter
    	c = Counter(['joseph', 'trump', 'alice', 'jon', 'lili', 'joseph', 'lili','trump','joseph'])
    	print(c)  # Counter({'joseph': 3, 'trump': 2, 'lili': 2, 'alice': 1, 'jon': 1})
    
  • 模块内置功能之OrderedDict

    1.OrderedDict: 有序字典,将无序字典变为有序字典
    	from collections import OrderedDict
    	d = dict([('name', 'joseph'), ('age', '21'), ('gender','male'), ('hobby', 'read')])
    	print(d)  # {'name': 'joseph', 'age': '21', 'gender': 'male', 'hobby': 'read'} 
      	# 其实应该是乱的但是pycharm太只能了帮我们理清了
    	od = OrderedDict([('name', 'joseph'), ('age', '21'), ('gender','male'), ('hobby', 'read')])
    	print(od)  # OrderedDict([('name', 'joseph'), ('age', '21'), ('gender', 'male'),
      	('hobby', 'read')])
    	print('hobby')  # hobby
    
  • 模块内置功能之Defaultdict

    1.defaultdict: 带有默认值的字典
    	from collections import defaultdict
    	l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 520, 521]
    	dic1 = defaultdict(list)
    	for i in l1:
        	if i < 66:
            	dic1['k1'].append(i)
        	else:
            	dic1['k2'].append(i)
    	print(dic1)
    
    

time模块

  • 时间戳

    1.时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行
    “type(time.time())”,返回的是float类型
    	import time
    	print(time.time())  # 1657797052.588196
    
  • 结构化时间

    1.结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,
    一年中第几天,夏令时),打印时能够打印我们所在时区的时间
    	import time
    	print(time.localtime())  # time.struct_time(tm_year=2022, tm_mon=7,
      	tm_mday=14, tm_hour=19, tm_min=16, tm_sec=33, tm_wday=3, tm_yday=195, 	
      	tm_isdst=0)
    
    索引(Index) 属性(Attribute) 值(Values)
    0 tm_year(年) 比如2011
    1 tm_mon(月) 1 - 12
    2 tm_mday(日) 1 - 31
    3 tm_hour(时) 0 - 23
    4 tm_min(分) 0 - 59
    5 tm_sec(秒) 0 - 60
    6 tm_wday(weekday) 0 - 6(0表示周一)
    7 tm_yday(一年中的第几天) 1 - 366
    8 tm_isdst(是否是夏令时) 默认为0
  • 格式化时间

    1.我们通过这些就可以直接打印出当前时间
    	import time
    
    	print(time.strftime("%Y-%m-%d %X"))  # 2022-07-14 19:19:58
    	print(time.strftime("%Y-%m-%d %H-%M-%S"))  #2022-07-14 19-19-58
    	print(time.strftime("%Y-%m-%d %H:%M:%S %p"))  #2022-07-14 19:19:58 PM
    

    %y 两位数的年份表示(00-99)
        %Y 四位数的年份表示(000-9999)
        %m 月份(01-12)
        %d 月内中的一天(0-31)
        %H 24小时制小时数(0-23)
        %I 12小时制小时数(01-12)
        %M 分钟数(00=59)
        %S 秒(00-59)
        %a 本地简化星期名称
        %A 本地完整星期名称
        %b 本地简化的月份名称
        %B 本地完整的月份名称
        %c 本地相应的日期表示和时间表示
        %j 年内的一天(001-366)
        %p 本地A.M.或P.M.的等价符
        %U 一年中的星期数(00-53)星期天为星期的开始
        %w 星期(0-6),星期天为星期的开始
        %W 一年中的星期数(00-53)星期一为星期的开始
        %x 本地相应的日期表示
        %X 本地相应的时间表示
        %Z 当前时区的名称
        %% %号本身

标签:调用,导入,规范,tm,模块,time,print,import,目录
来源: https://www.cnblogs.com/joseph-bright/p/16479037.html

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

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

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

ICode9版权所有