在实际项目开发过程中,功能需求会越来越多,从而代码也会越来越多,如果所有的代码全部写在一个.py文件里面,会很糟糕,代码可读性也差,也不容易维护。所以,Python语言设计者,提出了模块和包的概念。
模块,就是每个.py文件的内容。
包,就是.py文件所在的目录。
1、使用Python内置模块
其实之前的相关内容文章里面已经有体现了,比如文件目录遍历时引入了os模块。
示例:引入sys.py模块
importsys#引入模块,注意不要加.py
print("获取命令行参数:")
foriinsys.argv:
print(i)
print("Python 路径为:",sys.path)
输出:
>>>获取命令行参数:
>>>D:/Code/2.py
>>>Python 路径为: ['D:\\Code', 'D:\\Code', 'D:\\Code\\venv\\Scripts\\python37.zip', 'D:\\Python\\Python37\\DLLs', 'D:\\Python\\Python37\\lib', 'D:\\Python\\Python37', 'D:\\Code\\venv', 'D:\\Code\\venv\\lib\\site-packages', 'D:\\Code\\venv\\lib\\site-packages\\setuptools-39.1.0-py3.7.egg', 'D:\\Code\\venv\\lib\\site-packages\\pip-10.0.1-py3.7.egg', 'D:\\Program Files\\JetBrains\\PyCharm 2018.2.3\\helpers\\pycharm_matplotlib_backend']
2、使用自定义模块
自定义模块时,需要注意模块名称不要与系统自带的模块命名重复
我们创建一个getpath.py文件,里面的代码就是之前的遍历目录的代码。
然后在新建一个test.py文件,在test.py文件里面引入getpath.py模块中的getPath函数。
2.1 使用import 语句引入
importgetpath#引入getpath自定义模块
getpath.getPath(r"D:\Code\log")
执行即可遍历D:Code\log目录
2.2 使用from......import语句引入
说明:从模块中引入指定内容
fromgetpathimportgetPath#引入getpath自定义模块
getPath(r"D:\Code\log")
执行即可遍历D:Code\log目录
2.3 使用from......import *语句引入
说明:把一个模块中的所有内容全部引入,一般建议少用该方式
fromgetpathimport*#引入getpath自定义模块
getPath(r"D:\Code\log")
执行即可遍历D:Code\log目录
3、__name__属性
一个模块被了另一个程序引入,如果我们想让模块中的某一程序块不执行,可以用__name__属性来使该程序块仅在该模块自身运行时执行。
示例:
我们修改getpath.py文件,在最后添加一个打印
print("程序运行结束")
这样我们在运行getpath.py时,会输出“程序运行结束”,运行test.py时也会输出“程序运行结束”。
如果我们想实现:运行getpath.py时,输出,运行test.py时不输出,可以这样来实现:在print打印前面增加一个__name__ == "__main__"
4、包
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。只要顶层的包不与其他包发生冲突,那么包里面的模块都不会发生冲突。
注意:只有目录中包含一个 __init__.py 的文件才会被认作是一个包,这个文件是必须存在的。
示例:
比如一个Code包,里面有getpath模块,模块中有一个getPath函数,引入方式如下: