Python —— 模块
1、Python中模块(Module)是一个python文件,以“ .py ”结尾,包含了Python对象定义和Python语句。
2、使用模块的好处:
a. 使用模块能够有逻辑地组织Python代码段。
b. 把相关的代码分配到一个模块里能让代码更好用,更易懂。
c. 模块能定义函数、类和变量,模块里也能包含可执行的代码。
d. 提高代码的可维护性;编写代码不必从零开始,当一个模块编写完毕,可以被调用。
3、包(package)
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(package)。
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的python的应用环境。
image.png注意:
a. 简单来说,包就是一个文件夹,但该文件夹下必须存在init.py 文件,init.py用于标识当前文件夹是一个包,否则,Python就把这个目录当成普通目录,而不是一个包。
b. init.py可以是空文件,也可以有Python代码,因为init.py 本身就是一个模块,而它的模块名就是mycompany。
4、创建模块时要注意命名,不能和python自带的模块名称冲突,否则将无法导入系统自带的模块。
5、作用域
在模块中,有时定义的函数和变量希望仅仅在模块内部使用。在Python中,是通过前缀“_”来实现。
函数和变量定义成Public,可以直接被引用。例如,abc, x123, PI等;
_xxx和_h这样的函数和变量则是被定义成private,不应该直接被引用。
为什么private函数和变量“不应该”被直接引用,而不是“不能”被直接引用?
答:因为Python中并没有一种方法可以完全限制访问Private函数或变量,但是,编程习惯上不应该引用private函数或变量。
6、在python中,安装第三方模块,是通过包管理工具pip完成的。
Q:Windows系统中如何判断是否安装了pip?
步骤一:Windows图标+R,打开运行窗口,如下图
image.png步骤二:输入cmd,打开下面窗口,输入pip,如果出现下面提示,说明python中已经安装了pip.
image.png7、在使用python时,经常需要用到很多第三方库。
第三方库Python Imaging Library,这是Python下非常强大的处理图像的工具库。
例如,pillow、mysql驱动程序、科学计算numpy等。用pip一个一个安装费时费力,推荐直接安装Anaconda。
Anaconda指的是一个开源的Python发行版本,其包含了conda、python等180多个科学包及其依赖项。因为包含了大量的科学包,Anaconda的下载文件比较大,如果只需要某些包,可以使用Miniconda这个较小的发行版(仅包含conda和python)。
Anaconda包括conda、Python以及一大堆安装好的工具包, 比如:numpy、pandas等。
8、模块搜索路径
当加载一个模块时,Python会在指定的路径下搜索对应的 .py 文件,如果找不到,就会报错:
image.png默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:
image.png9、面向对象编程,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向的对象的设计思想是抽象出Class,根据Class创建Instance.
10、面向对象最重要的概念是类(Class)和实例(Instance),类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
11、在Python中,定义类是通过class关键字,以Student类为例:
Class Student ( object):
pass
Class后面是类名,即Student,类名通常是大写开头的单词,object表示该类是从哪个类继承下来的,通常,如果没有合适的继承类,就是用Object类,这是所有类最终都会继承的类。
定义好了类,就可以根据类创建出实例,创建实例是通过“类名+() ”实现的。
12、由于类可以起到模板的作用,因此可以在创建实例时,通过定义一个特殊的“init”方法,添加一些属性。
说明:
(1)“ init ”方法的第一个参数永远是self,表示创建的实例本身,在 init ”内部,可以把各种属性绑定到self。
(2)有了“init”方法,在创建实例的时候,必须传入与“init”方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去。
class Student(object):
def _init_(self,name,score):
self.name=name
self.score=score