对于很多向我一样的初学者来说,不知道什么时候用import xxx,什么时候用from xxx import xxx,
或者是from x.y import xxx?通常我们导入的模块是系统自带模块,第三方库和自定义模块,那么我们就从这三方面来说。
一,系统自带模块
用我们常见math模块来解释
#例一
import math
a=math.cos(5)print(a)
有的时候是这样引用
#例二
from math import cos #引用三角函数的时候不用加上()
a=cos(5)
print(a)
例一导入的是math的factorial函数,例二导入的是math里的三角函数 。那么他们们的区别是什么呢?看看下边的例子
很显然,import引入的是模块math,它是一个module类,from import引入的是模块里的sin()函数,它是一个function或method类。
如果你的代码里边已经决定就使用这一个sin()函数了,那么这两种方法都可以用,没有区别。
import math
a=math.sin(5)
from math import sin
a=sin(5)
但是如果你用math里边的多个函数或方法,那么第一种方法更加清晰一点
import math
a=sin(5)+cos(5)
相反的话就是
from math import sin,cos
a=sin(5)+cos(5)
二,第三方库
如果使用的第三方库的话,我们也会看见如下的代码
from lxml.html import fromstring
selector = fromstring(HTML)
也可以写成
from lxml import html
selector = html.fromstring(HTML)
但是,如果这样写的话会报错
import lxml
selector = lxml.html.fromstring(HTML)
那么这里的lxml.html
又是什么东西呢?
这种情况多常见于一些特别大型的第三方库中,这种库能处理多种类型的数据。例如lxml
它既能处理xml
的数据,又能处理html
的数据,于是这种库会划分子模块,lxml.html
模块专门负责html
相关的数据。
三,自定义模块
要先理解自定义模块,先来理解一下模块与包的定义
1、模块、包
模块 module:一般情况下,是一个以.py为后缀的文件。
module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让coder重点放在高层逻辑上。
module能定义函数、类、变量,也能包含可执行的代码。module来源有3种:
①Python内置的模块(标准库);②第三方模块;③自定义模块。
包 package: 为避免模块名冲突,Python引入了按目录组织模块的方法,称之为 包(package)。包 是含有Python模块的文件夹。
即包相当于一个文件夹,模块相当于文件夹里的文件,文件内容是代码块,便于引用。
先创建一个包(文件夹)CSDN,在里边加入了main.py和Tuster_.py模块
在Tuster_.py模块中,定义模块中的函数write,每次调用write函数都会打印‘write函数被调用’
在main.py模块中,调用Tuster_模块的write函数
这样就可以调用我们自己定义的模块啦!!!可以根据需要自己定义自己模板,并填充代码块,达到让主体代码更加简洁,隐藏部分代码,可读性更加高的目的啦!!!