Python基础day23:绝对导入和相对导入、模块化编程简介、软件开发目录规范、常见内置模块collections和time

day23今日内容概要:

1.绝对导入与相对导入

2.包的概念(package)

3.模块化编程思想简介

4.软件开发目录规范

5.常见内置函数:collections和time

6.作业(将员工管理系统用模块化编程,结合软件开发目录规范来封装)

今日内容详解

1.绝对导入和相对导入

PS:只要存在import导入模块的操作,那么sys.path(程序系统环境变量)永远以当前执行文件的根目录为参考路径。

1.1.绝对导入:
句式:from 文件夹名 import py文件名

分析:这里的文件夹必须包含在当前执行文件的根目录下,可单层也可多层,
     具体多少层路径需要在from后面采用 ad1.ad2.ad3 的形式注明
1.2.相对导入:
句式:from . import py文件名    或者是       from .. import py文件名

拓展知识:单句点符. 表示当前文件路径
    双句点符.. 表示当前路径的上一层路径
    ../.. 表示上上层

分析:所以from . import py文件名    表示从关键字import所在的文件根目录下导入一个py文件,
     from .. import py文件名      表示从当前文件根目录的上一层导入一个py文件

总结:相对导入依赖于关键字import所在的那个文件根目录路径,适合用来模块之间导入(前提是模块与模块在同一个根目录下),但是当模块比较多的时候还是容易找不到模块而报错。
绝对导入依赖于当前执行文件的根目录路径,找不到模块不容易上报错误。更推荐使用绝对导入的方式来导入模块。

[En]

The absolute import depends on the root directory path of the current execution file, and it is not easy to report an error because the module cannot be found. It is more recommended to use the absolute import method to import the module.

2.包的概念(package)

概念:”包”实际上就是文件夹,只是在文件夹里面多了一个__init__.py文件,而在这个__init__.py文件里面你可以配置这个文件夹里面哪些模块可以被调用。实际上在Python3里面对包和文件夹的区别已经不大了。

3.模块化编程简介

概念:类似于早期将带有特定函数的一段代码封装到一个函数中,需要时可以直接调用,而模块化编程是将更多的代码或定义的函数和变量放入。封装成一个模块,当您需要使用该模块的功能时,可以直接导入该模块。

[En]

Concept: similar to encapsulating a piece of code with a specific function into a function in the early stage, which can be called directly when needed, while modular programming is to put more code or defined functions and variables. Encapsulated into a module, when you need to use the functions of the module, you can directly import this module.

4.软件开发目录规范

目的:为了方便代码的管理,项目的维护,调试等,将具有特定功能的文件(.py .TXT .log)分类放进一个指定的文件夹内

4.1规范的目录框架:
bin               ->start.py  存放启动文件
configure         ->setting.py  存放配置文件
core              ->  src.py   存放项目的核心逻辑代码文件
library           ->  common.py  存放各模块之间通用的文件
database          ->  user_data.txt   存放项目的数据库文件
interface         ->    order.py   存放项目的拓展接口文件
log               ->  log.txt   存放项目运行的日志文件
requirement.txt   存放运行该项目所需要具备的条件
readme.txt        存放对该项目的一些功能介绍等等

PS:实际项目开发中并不一定需要完完全全按照这个框架来设置文件目录,比如当bin文件夹里只有一个start.py文件时,完全可以把start文件拿出来直接放在项目的根目录下。总之只要能大致按照这个框架最终达到软件开发目录规范的目的即可。

5.常见内置模块

5.1.collections:
1.具名元组 namedtuple
导入:from collections import namedtuple
功能:point = namedtuple('三维坐标', 'x y z')
    res = point(1, 2, 3)
    print(res)  # 三维坐标(x=1, y=2, z=3)   作用就是将数据值赋值给元祖里面的x,y,z并组成一个元组,同时还为这个元组绑定了一个名字

2.双端队列deque(只做了解)
from collections import deque
作用:队列前可以用appendleft(x)来追加数据,队列后可用.append(x)来追加数据,不同于列表,只能使用.append(x)在后面追加新数据

3.Counter(计数)
from collections import counter
str = 'hhhdbfhhffvbvhbfnfjuenvbfih'
res = Counter(str)
print(res)    # Counter({'h': 7, 'f': 6, 'b': 4, 'v': 3, 'n': 2, 'd': 1, 'j': 1, 'u': 1, 'e': 1, 'i': 1})   Counter会统计字符串中每一个字符出现的次数,并生成一个字典
5.2.time(时间模块):
import time
time.time()   获取时间戳(从1970年到现在多少秒) # 1657789438.0584188
time.sleep(3)  定时,延时,总之让程序停止3秒钟
time.gmtime()  获取结构化时间(计算机更易读懂)  # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=9, tm_min=3, tm_sec=58, tm_wday=3, tm_yday=195, tm_isdst=0)
time.strftime(format)  获取格式化时间(更方便人查看)   # 2022-07-14 17:12:40

PS:格式化时间的获取方式
res = time.strftime('%Y-%m-%d %H:%M:%S')  # 需要给定一个时间格式
res2 = time.strftime('%Y-%m-%d %X')     # %X = %H:%M:%S
print(res)   # 2022-07-14 17:16:16
print(res2)  # 2022-07-14 17:17:09

time.strptime(string, format)      # 将给定的格式化时间string,按照给定格式format转换为结构化时间
eg:res = time.strptime('2022-07-14', '%Y-%m-%d')
print(res)   # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=195, tm_isdst=-1)

6.作业(将员工管理系统用模块化编程,结合软件开发目录规范来封装)

Python基础day23:绝对导入和相对导入、模块化编程简介、软件开发目录规范、常见内置模块collections和time

Original: https://www.cnblogs.com/amor815/p/16478578.html
Author: 海饼干815
Title: Python基础day23:绝对导入和相对导入、模块化编程简介、软件开发目录规范、常见内置模块collections和time

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499061/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球