平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“快速进修Python指南之自定义模块常用模块”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
引言
实际处理时,按照我们平常的惯例,我先来讲一下今天这节课的内容,以及Java和Python在某些方面的相似之处。Python采用import语句来导入包,而Java也是如此。然而,两者之间的区别在于Python没有类路径的概念,它直接采用.py文件的文件名作为导入路径,同时将其余的工作交给Python解释器来扫描和处理。另外,你可能经常看到有人采用from…import语句,这种语法是为了从.py文件中只导入部分函数或变量而设计的。也可能是导致不同包目录的情况
自定义模块
从实现思路看,我来举一个在Java开发中常用的开发方式作为例子。在我们进行项目开发时,通常会在项目的结构中新建一个util包,用来存放一些工具类。同样,Python也能够采用类似的方式来组织代码结构,让大家更容易理解。
在同目录下
实际处理时,若你想在在同目录下新建一个nameUtil.py文件,同时不想另外新建一个util包的话,也能够,我们能够演示一下。以下是nameUtil.py的轻松内容:
name = "xiaoyu"
def getName(name):
print(f"我的名字是{name}")
从实现思路看,在执行的Python文件(main.py)里,能够直接采用import语句来引入其他模块。比如:
import nameUtil
name = "xiaoyu"
nameUtil.getName(nameUtil.name) # 可将nameUtil.name替换成name
能够采用from…import语句优化一下上面的内容:
from nameUtil import getName
getName("xiaoyu")
理解这一步时,这种情况是最轻松的。当你想要导入某个包的时候,你可能会想,为什么我能够直接导入,而不需在同目录下引入各种第三方包呢?实际上,这和Java是一样的。Python也有固定的包扫描路径。比如,当我们导入第三方包时,Python会搜索第三方库的安装路径。这些路径通常是借助包管理工具(如pip)安装的。
不在同一目录下
落到代码里,如果我们将一些Python工具类单独放在一个名为"util"的目录中,这样能够更好地组织代码。这种做法符合规范,同时且让我们的代码更易读、易维护。下面我将演示一下如何采用这种目录结构,唯一的区别是,你需采用"from"语句来导入工具类,而不能轻松地采用"import"语句。
目录结构如下所示:

main.py内容如下所示:
main.py内容如下:
from utils import nameUtil
name = "xiaoyu"
nameUtil.getName(nameUtil.name) # 可将nameUtil.name替换成name
结合项目来看,这就很像我们正常开发的模式了,因为在开发过程中,我们通常需将模块按照不同的功能进行分级,同时新建相应的包目录结构。这样,我们就能够像上面那样编写代码。如果有多层包目录,我们能够继续按照相同的方式导入模块,比如:from java.utils import nameUtil。感觉就像是回到了熟悉的开发环境,我们能够开始进行正常的开发工作了。
常用模块
从实现思路看,我们将举一些在开发Java工作中常用的工具类,这些工具类同样适用来Python编程语言。
time模块
在这个场景下,提供了与时间相关的函数和类,能够用来拿到当前时间、格式化时间、计时等操作。在加密接口中,经常需采用时间戳场景来确保数据的安全性。
拿到当前时间戳:current_time = time.time()
将时间戳转换为可读时间:readable_time = time.ctime(current_time)
格式化时间:formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(current_time))
程序休眠一定时间:time.sleep(2) # 程序暂停2秒
datetime模块
在这个场景下,是Python中提供的一个功能强大的模块,它包含了许多与日期和时间相关的函数和类,能够便于地进行日期和时间的计算、格式化等操作。在很多场景下,比如列表查询等,我们经常会用到日期模块的功能。
拿到当前日期时间:current_datetime = datetime.datetime.now()
格式化日期时间:formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
计算两个日期之间的差值:time_difference = datetime.datetime(2022, 1, 1) - datetime.datetime(2021, 1, 1)
json模块
从实现思路看,在Python中提供了处理JSON数据的函数和类,它能够被广泛地应用来解析和生成JSON数据。在工作中,我们经常会遇到需处理JSON数据的情况,所以我想详细解释一下它的用法。然而,这里需留意,在某些特定的情况下,比如与微信开放者平台进行接口对接时,数据的传输形式可能会是XML格式。在我之前的工作经历中,就遇到过这样的情况,在与微信开放者平台对接时我也踩过一些坑,需特别注意。
解析JSON字符串
json_data = '{"name": "xiaoyu", "age": 30}'
parsed_data = json.loads(json_data)
# 获取key的value值
name = parsed_data["name"]
age = parsed_data["age"]
print(name) # 输出:xiaoyu
print(age) # 输出:30
# 添加新的键值对
parsed_data["city"] = "China"
print(parsed_data)生成JSON字符串:data = {"name": "John", "age": 30} json_data = json.dumps(data)这里的data是对象,变量json_data就是一个包含了"name"和"age"键值对的JSON格式字符串。
os模块
实际处理时,提供了与操作系统相关的函数和类,能够用来进行文件和目录操作、进程管理等操作。如果你经常需进行文件操作,不管是在学习还是工作中,了解和掌握os模块都是很重要的。
拿到当前工作目录:current_directory = os.getcwd()
新建目录:os.mkdir("new_directory")
判断文件或目录是否存在:exists = os.path.exists("file.txt")
sys模块
从实现思路看,提供了与Python解释器和系统相关的函数和变量,能够用来拿到命令行参数、退出程序等操作。这在开发中很有用,尤其是当我们需与系统进行交互时。
拿到命令行参数:arguments = sys.argv
退出程序:sys.exit()
总结
在这个场景下,在导入包方面,两者都采用import语句,但是Python没有类路径的概念,直接采用文件名来导入模块。我们还讨论了自定义模块的新建和采用,以及在不同目录下如何组织代码结构。此外,我们介绍了一些常用的Python模块,包括time、datetime、json、os和sys,它们在开发中很实用。希望今天的课程对大家有所帮助!
落到代码里,总的来说,Python常用模块适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。