文章目录
- 一、自定义模块
- 1.如何自定义模块并导入?
- 2.`__main__`变量的功能
- 3.注意事项
- 二、自定义包
- 1.什么是Python的包?
- 2.`__init __.py`文件的作用?
- 3.`__all__`变量的作用?
- 4.示例
- 三、自定义模块和自定义包的好处
一、自定义模块
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开发中常用的工具和技术。