Python中的模块和JAVA里面包的概念很类似,在JAVA中如果我们要使用一个第三方的功能,可以通过如下方式来引入。
示例:
package com.example.tests;
import static org.junit.Assert.*;
import java.util.*;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.ie.InternetExplorerDriver;
上面展示了JAVA导入了两个包:junit和selenium。下面来看看Python是如何导入第三方功能的。
示例:
我们可以看到,JAVA和Python的导入都是通过import的方式来实现的。但Python导入除了import外,还有from ..import ..这种方式,下面一起来看一下。
【方式一: import】
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件的最开头输入import math。当解释器遇到import语句,如果模块在当前的搜索路径就会被直接导入。
像上面导入math后,在调用时为什么还要加上math.sprt()呢?因为可能存在这样一种情况,在多个模块中存在相同的函数名,此时如果直接写函数名的话,Python解释器无法判断该执行哪个函数,所以才需要加上math这个模块名。
【方式二: from … import …】
Python也可以只导入某个模块的某个功能,比如上面的import math它倒入了math模块中的所有功能,那通过from math import sqrt就可以只导入sqrt这个功能了。
示例:
通过from … import …这种形式导入的话,就可以不用写具体的模块名了,直接通过函数名就可以直接调用了。
上面imprt math导入了math模块下的所有功能,但调用时需要写上模块名.函数名;而from math import sqrt这种方式只是导入了math模块下的sqrt一个功能,那如何即要导入math模块下的所有功能,又要省去模块名.函数名这种写法呢?
示例:
通过from math import * 就可以实现即要导入math模块下的所有功能,又省去了模块名.函数名这种写法。但是Python并不建议我们这样做。
另外,有时你的模块名或者模块的属性名已经存在了,或者当前的模块名输入时比较麻烦,再或者你就想使用自己定义的模块名,那可以使用as关键字。
示例:
又或者:
【搜索路径和路径搜索】
模块的导入需要一个叫做“路径搜索”的过程。即在文件系统“预定义区域”中查找某个文件,这些预定义区域只不过是你的Python搜索路径的集合。路径搜索—>指查找某个文件的操作; 搜索路径—>是去查找一组目录。
默认搜索路径是在编译或是安装时指定的,在Python中是保存在sys.path的变更里。
可以看到sys.path返回的是列表,所以我们可以通过操作列表的方式来添加新的路径。即:sys.path.append(‘路径’)
示例:
当前路径: ‘/Users/huangxh/Desktop/test’
文件结构:
当前路径下面没有一个叫A的模块名(或文件夹),即在当前路径下面我们只能访问到AA文件夹,所以导入时会报错。
可以通过将当前路径加入到sys.path路径里来解决这个问题
【_all_】
在某个Python文件头部加上all = [“Test”,”test1”]后,再import导入模块时,只会将Test和test1导入,而其它的模块不会被导入。
示例:
【_init_.py】
Python里面有包和模块的概念,包可以理解成一个文件夹,模块可以理解成一个文件
示例:
init.py:是用来控制当import包时,如何处理包下面的模块。
示例:
在init.py文件里面加上:all = [“classA”,”test”],表明当import A时,可以访问classA和test模块。如果此时在A文件夹下又多了一个testb.py的文件,当用户去直接调用testb的时会报错
【_pycache_文件夹】