模块导入和搜索路径

来源:互联网 发布:seo文案分享的东西 编辑:程序博客网 时间:2024/06/07 10:41

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_文件夹】
这里写图片描述

0 0
原创粉丝点击