Python基础(二十二、自定义模块和包)

发布时间:2024年01月09日

一、自定义模块

1.如何自定义模块并导入?

在Python代码文件中正常写代码即可,通过import、from关键字和导入Python内置模块一样导入即可使用。模块的详细使用可以见[Python基础(二十一、模块的使用,else的使用tip)]。(https://blog.csdn.net/qq_35716085/article/details/135453562)
例如:
formatJson.py

def formatJsonReturn(newLine, str, file):
    for line in file:
        if line.strip().startswith(str):
            dict = line.strip().replace('"',"").replace(',',"").replace(' ',"").split(":")[1]
            newLine.append(dict)
    return newLine

openJson.py

import formatJson
def openJson(uri):
    newLine = []
    with open(uri,"r") as file:
        formatJson.formatJsonReturn(newLine, '"title": ',file)
        print(newLine)
    return newLine
openJson("D:/test/demo/articles.json")

openJson导入了formatJson模块

import formatJson

或者

from formatJsonimport formatJsonReturn

2.__main__变量的功能

if__main__==“__main__ ”表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if无法进入
例如:
formatJson.py

def formatJsonReturn(newLine, str, file):
    for line in file:
        if line.strip().startswith(str):
            dict = line.strip().replace('"',"").replace(',',"").replace(' ',"").split(":")[1]
            newLine.append(dict)
    return newLine
if __name__ == "__main__":
    newLine = []
    file = ["test:111"]
    formatJsonReturn(newLine, 'test', file)
    print(newLine)

将formatJson.py增加if __name__ == "__main__",如果直接运行formatJson.py,可以输出:

['111']

但是当其他模块调用该模块时,就不会走到if __name__ == " __main__ "当中,即不会输出[‘111’]。

3.注意事项

printJson.py

def formatJsonReturn(str):
    print(str)

formatJson.py同上不变,下面给openJson.py引入formatJson.py和printJson.py的formatJsonReturn函数。

from formatJson import formatJsonReturn
from printJson import formatJsonReturn
def openJson(uri):
    newLine = []
    with open(uri,"r") as file:
        formatJsonReturn(newLine, '"title": ',file)
        print(newLine)
    formatJsonReturn('"title": ')
    return newLine
openJson("D:/jushu/demo/articles.json")

猜猜会发生什么?
在这里插入图片描述
报错了,因为导入的函数名相同,被后边导入的覆盖了,后导入的参数只有1个,而我写了三个入参~~~

  • 不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的
  • __all__变量可以控制import*的时候哪些功能可以被导入

二、自定义包

1.什么是Python的包?

包就是一个文件夹,里面可以存放许多Python的模块 (代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。

2.__init __.py文件的作用?

创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。

3.__all__变量的作用?

同模块中学习到的是一个作用,控制 import*能够导入的内容

4.示例

以下是一个示例,演示如何创建一个简单的包及其 __init__.py 文件:

my_package/
	__init__.py
	formatJson.py
	openJson.py

__init__.py 文件中,你可以添加以下内容:

# __init__.py

# 可以在这里导入模块
from .openJson import openJson
from .formatJson import formatJsonReturn
from .formatJson import testJson
# 定义 __all__ 变量
__all__ = ['formatJsonReturn', 'openJson']

这样,在其他模块中导入my_package 包时,即使是import *也只有 openJson和 formatJsonReturn会被导入。这提供了更细粒度的控制,确保只有你想要导出的内容可供其他模块使用。

三、自定义模块和自定义包的好处

  • 模块化和组织性: 自定义模块和包可以将相关的代码组织在一起,使代码更易于管理和维护。通过将功能拆分为多个模块或包,可以提高代码的可读性和可维护性。

  • 代码复用: 自定义模块和包可以在不同的项目中重复使用。通过将通用功能封装为模块或包,可以避免重复编写相同的代码,提高开发效率。

  • 命名空间隔离: 自定义模块和包提供了命名空间的隔离。通过将代码放入不同的模块或包中,可以避免命名冲突,并确保代码之间的相互独立性。

  • 可扩展性: 自定义模块和包可以方便地进行扩展。通过添加新的模块或包,可以向项目中添加新的功能或特性,而无需修改现有代码。

  • 代码共享和交流: 自定义模块和包可以与其他开发者共享和交流。通过将代码打包成模块或包,可以方便地与他人分享自己的代码,促进合作和知识共享。

总的来说,自定义模块和包能够提高代码的组织性、可复用性、可维护性和扩展性,同时也方便代码的共享和交流,是Python开发中常用的工具和技术。

文章来源:https://blog.csdn.net/qq_35716085/article/details/135478569
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。