python软件开发目录与规范


绝对导入与相对导入

查找路径只按照执行文件所在的sys.path

– 绝对导入
# 就是按照执行文件所在的sys.path为起始路径,一步步往下查找
eg1 :
 from a import func
 #在同一个文件路径下模块可以直接导入
 
eg2 :
 from c.a import func
 #在不同路径下模块导入用点的方式把模块当前路径加到执行文件
***
  在模块文件中,如果涉及到页需要导入模块的情况,就用from句式,这种句式也成为绝对导入
***
 
 
 ps:由于pycharm会自动将项目根目录添加到sys.path中所以查找模块肯定不报错的方法就是永远从根路径往下一层层找	

eg1:
image

eg2:
image
*不同路径下的模块导入会报错

image

– 相对导入
#相对导入的局限性:
1,只能在模块中导入,不能在执行文件中导入
2,在项目比较复杂的情况下可能会出错


相对导入可以不参考执行文件所在的路径 直接以当前模块文件路径为准

image

*推荐使用绝对导入

查找路径补充知识点
1.  . 在路径中是当前路径
2. .. 在路径中是上一层路径
3.  ../..在路径中是上上一层路径

eg:
image

包的概念与作用
1.包的概念:简单来讲就是文件夹 ,从专业的角度来说就是内部含有__init__.py的文件夹.
2.作用主要是方便管理文件,快捷操作。
3.具体操作
  import 包名
  
  **导入包名其实导入的是里面的__init__.py文件(该文件里面有什么你才能用什么) ,   此方法比较鸡肋 !!!!
  可以直接跨过__init__.py导入包里面的文件内容
  

image

软件开发目录规范

1.bin文件夹 :用于存储程序启动文件  
    # eg: start.py
2.conf文件夹 : 用于存储程序的配置文件
  #eg : settings.py
3.core文件夹 : 用于存储程序的核心逻辑
   #eg : scr.py
4.lib文件夹 : 用于存储程序的公共功能(模块等)
  #eg : common.py
5.db文件夹 : 用于存储程序的数据文件  txt文件
6.log文件夹 : 用于存储程序的日志文件
  #eg : log.log
7.interface 文件夹: 用于存储程序的接口文件
8.readme文本文件 :用于编写程序的说明介绍等
9.requirements.txt文件 :用于存储程序所需的第三方模块名称和版本。


*我们在编写软件的时候 可以不完全遵循上面的文件名
	start.py可以放在bin文件夹下也可以直接放在项目根目录

常见内置模块

  • collections模块

给我们提供了更多数据类型

1.namedtuple 具名元组

 用于创建一个自定义的tuple对象,可以使用名字来访问元素内容
 
typename :命名的名字,返回一个新的元组子类,名为 typename
 
field_names : 可以是一个['a','b']的序列,也可以是'a,b'或者'a b'
from collections import namedtuple
res = namedtuple('元组','summer')
res1 = res('今天又是快乐的一天')
print(res1) #元组(summer='今天又是快乐的一天')
print(res1.summer)#今天又是快乐的一天
2.deque 双端队列
deque是为了高效实现插入和删除操作的双向列表,实现了在两端快速添加(append)和弹出(pop),适用于队列和堆栈


from collections import deque
res = deque()
res.append(666)
res.append(888)
res.append(999)
# print(res)  #deque([666, 888, 999])
print(res.pop())
print(res)  #999  deque([666, 888])

OrderedDict有序字典
会按照key的插入顺序排序的字典
from collections import OrderedDict
d = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d)   #{'a': 1, 'b': 2, 'c': 3}

4.counter 计数器
就是用来计数的 ,它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value
from collections import Counter
c = Counter('abdhdbdda')
print(c)  #Counter({'d': 4, 'a': 2, 'b': 2, 'h': 1})
  • time模块

#表示时间的三种格式,可以相互转换

    	1.时间戳	          time.time() 
	2.结构化时间	  time.gmtime() 计算机看的时间
	3.格式化时间	  time.strftime() 人看的时间
1.time.time
import time
print(time.time())  #1657801323.6643276

#时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数.

2.gmtime()
import time
print(time.gmtime()) 
# time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=12, tm_min=27, tm_sec=50, tm_wday=3, tm_yday=195, tm_isdst=0)

3.serftime()
import time
print(time.strftime("%Y-%m-%d %X"))
#2022-07-14 20:44:52

#括号密码的%X也可以写成%H%M%S

4.三种时间格式的转换
import time
# 时间戳转结构化时间
print(time.localtime())   #当地时间
# time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=21, tm_min=13, tm_sec=36, tm_wday=3, tm_yday=195, tm_isdst=0)
print(time.gmtime())
# time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=13, tm_min=15, tm_sec=57, tm_wday=3, tm_yday=195, tm_isdst=0)


#结构化时间转时间戳
import time
time_tuple = time.localtime(1500000000)
print(time.mktime(time_tuple))
  
  ![image](https://www.icode9.com/i/l/?n=22&i=blog/2882235/202207/2882235-20220714211109527-1130614782.png)

原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/274415.html

(0)
上一篇 2022年7月14日
下一篇 2022年7月14日

相关推荐

发表回复

登录后才能评论