基于Python模块,我们可以在编写代码的时候,导入许多外部代码来丰富功能。
但是,如果Python的模块太多了,就可能造成一定的混乱,那么如何管理呢?
通过Python包的功能来管理。
从物理上看,包就是一个文件夹,在该文件夹下包含了一个 _init_.py 文件,该文件夹可用于包含多个模块文件。
从逻辑上看,包的本质依然是模块
包的作用:
当我们的模块文件越来越多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块。
步骤如下:1. 什么是Python的包? 包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。 2. __init__.py文件的作用? 创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。 3. __all__变量的作用? 同模块中学习到的是一个作用,控制 import * 能够导入的内容
Pycharm中的基本步骤:
[New] - [Python Package] - 输入包名 - [OK] - 新建功能模块(有联系的模块)
注意:新建包后,包内部会自动创建`__init__.py`文件,这个文件控制着包的导入行为
方式一:
import 包名.模块名
包名.模块名.目标
方式二:
from 包名 import 模块名
模块名.目标
方式三:
from 包名.模块名 import 目标
目标
通过控制__init__.py 文件中的 __all__ = ['my_module1'] 变量
控制导入的模块
注意:
__all__针对的是 ’ from ... import * ‘ 这种方式 对 ‘ import xxx ’ 这种方式无效
总结:
1. 什么是Python的包?
包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。
2. __init__.py文件的作用?
创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。
3. __all__变量的作用?
同模块中学习到的是一个作用,控制 import * 能够导入的内容
我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。 所以,我们可以认为:一个包,就是一堆同类型功能的集合体。
在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:
这些第三方的包,极大的丰富了Python的生态,提高了开发效率。 但是由于是第三方,所以Python没有内置,所以我们需要安装它们才可以导入使用哦。
第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。
打开我们许久未见的:命令提示符程序,在里面输入:
pip install 包名称
即可通过网络快速安装第三方包
由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。
我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
https://pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的一个网站,可供pip程序下载第三方包
总结:
1. 什么是第三方包?有什么作用?
第三方包就是非Python官方内置的包,可以安装它们扩展功能,提高开发效率。
2. 如何安装?
练习案例:自定义工具包
创建一个自定义包,名称为:my_utils (我的工具)
在包内提供2个模块
- str_util.py (字符串相关工具,内含:)
- 函数:str_reverse(s),接受传入字符串,将字符串反转返回
- 函数:sub_str(s, x, y),按照下标x和y,对字符串进行切片
- file_util.py(文件处理相关工具,内含:)
- 函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
- 函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中
构建出包后,尝试着用一用自己编写的工具包。
file_util.py:
"""
file_util.py(文件处理相关工具,内含:)
函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,
如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中
"""
def print_file_info(file_name):
"""
功能是:将给定路径的文件内容输出到控制台
:param file_name: 即将读取的文件路径
:return: None
"""
f = None
try:
f = open(file_name, 'r', encoding='UTF-8')
content = f.read()
print(f"文件的全部内容是:\n{content}")
except Exception as e:
print(f"程序出现异常了,原因是:{e}")
finally:
if f: # 如果变量是None,表示False,如果有任何内容,就是True
f.close()
def append_to_file(file_name, data):
"""
功能:将数据追加写入到文件中
:param file_name: 指定的文件路径
:param data:指定的数据
:return:None
"""
f = open(file_name, 'a', encoding='UTF-8')
f.write(data)
f.write("\n")
f.close()
if __name__ == '__main__':
print_file_info('D:/test1.txt')
append_to_file('D:/test11.txt', '黑马程序员')
str_util.py
"""
str_util.py (字符串相关工具,内含:)
函数:str_reverse(s),接受传入字符串,将字符串反转返回
函数:sub_str(s, x, y),按照下标x和y,对字符串进行切片
"""
def str_reverse(s):
"""
见字符串进行反转
:param s: 将要反转的字符串
:return: 反转后的字符串
"""
return s[::-1]
def sub_str(s, x, y):
"""
按 x 和 y 下标将字符串进行切片
:param s: 将要切片的字符串
:param x: 开始的下标X
:param y: 结束的下标y
:return: 得到的字符串
"""
return s[x:y]
if __name__ == '__main__':
print(str_reverse("abcdefghi"))
print(sub_str("abcdefghi", 0, 8))