计算机程序开发中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里面,这样,这个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式,下面介绍一下Python中的一些基本概念:
基本概念
函数function
将一组代码组织到一起,实现某种功能
模块module
为实现某种逻辑将相关连的函数写在同一个文件里,使逻辑更清楚,这就是一个模块
在python中文件以.py 结尾,那这个.py文件就可以称之为模块,说白了,就是Python文件
库文件library
library,中文翻译为:库,也常称为:库文件
之所以此处不说是Python中的library,那是因为,本身library这个词,一般都是针对其他的编译型语言,比如C,C#等语言来说的。常见的C/C#等语言中的library,一般指的就是:
静态的库文件:xxx.a
动态的库文件:xxx.dll
Python中module和library之间的区别
对于library和module,说白了,都是提供了一定的功能供别人调用。
从这方面来说,也可以理解为:Python中library等价于module;
只不过,Python中,很少说library,正常的话,都是说module;
包Package
为了方便管理模块,python 中引入了包的概念
包是由关联的多个模块组成的目录,在每一个包下而都有一个__init__.py文件,这个文件必须存在
否则,Python就把这个目录当成普通目录,而不是一个包
init.py 可以是空文件,也可是有python代码,因为__init__.py本身就是一个模块
import 导入
使用import 关键字,可以将一个包中已出现的一个或多个函数或模块,引入到另一个python代码中,从而实现代码的复用
注意
1、如果是本地导入文件,直接使用:import filename
2、如果导入的是一个包,该包下面必须是有__init__.py文件才可以导入,否则报错,有了__init__.py文件,python解析器才会把这个目录当成是的包
使用module有什么好处呢?
最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数的名字冲突。
导入内置模块一般是这样的:
import os
如果不同的人编写的模块名相同怎么办?为了避免模块冲突,Python可以按Package来导入模块。
我们以我们经常用到的selenium包为例来讲一下import的三种方法:
我们先看一下selenium包的目录结构,如下图
selenium包的路径是在\Python 3.6.1\Lib\site-packages\selenium,一般第三方package都是在\Lib\site-packages\下
第一种导入模块方法:import modelName
import webdriver
driver = webdriver.Chrome() #定义一个driver变量
这个时候我们发现报错,是因为selenium包下面有多个packages,有多个webdriver.py文件,这时我们可以通过具体包去导入
import selenium.webdriver
driver = selenium.webdriver.Chrome() #定义一个driver变量
去selenium包目录下你会发现我们找不到webdriver.py文件,其实我们是导入了selenium包下面的webdriver包中的__init__.py文件,如图所示:
你可以看到这个文件里包含了各种浏览器的webdriver,在需要具体浏览器时,我们就可以自动定义webdriver,定义变量时需要用selenium.webdriver,因为我们导包时就是导入selenium.webdriver,你会发现这样有点麻烦。
这时我们可以使用第二种导入模块的方法:from package import modelName
from selenium import webdriver
driver = webdriver.Chrome() #定义一个driver变量
其实这种方法还可以导入模块里面具体的函数:from modelName import functionName
第三种导入模块方式:import modelName as xx
import selenium.webdriver as sample
driver = sample.Chrome() #定义一个driver变量
这个其实相当于将selenium.webdriver重命名,为了定义时方便
我们可以总结一下:
1.如果导入内置模块,一般是import modelName
2.如果需要导入包里面的所有模块,直接可以import packageName
3.如果需要导入具体包里面的模块或者模块里面的具体函数,使用from xx import yy
4.如果需要对导入的模块进行简单重命名,可以使用import modelName as xx