千家信息网

Python中import与from import有什么区别

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍Python中import与from import有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!系统自带模块(库)```cppimport retar
千家信息网最后更新 2026年11月04日Python中import与from import有什么区别

这篇文章主要介绍Python中import与from import有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

系统自带模块(库)

```cppimport retarget = 'abc1234xyz're.search('(\d+)', target)
但有时候,你可能会看到某些人这样写代码:```pythonfrom re import searchtarget = 'abc1234xyz'search('(\d+)', target)

那么这两种导入方式有什么区别呢?

我们分别使用type函数来看看他们的类型:

>>> import re>>> type(re)>>> from re import search>>> type(search)

可以看到,直接使用import re导入的re它是一个module类,也就是模块。我们把它成为正则表达式模块。而当我们from re import search时,这个search是一个function类,我们称呼它为search 函数。
一个模块里面可以包含多个函数。
如果在你的代码里面,你已经确定只使用search函数,不会再使用正则表达式里面的其他函数了,那么你使用两种方法都可以,没什么区别。
但是,如果你要使用正则表达式下面的多个函数,或者是一些常量,那么用第一种方案会更加简洁清晰。

例如:

import rere.search('c(.*?)x', flags=re.S)re.sub('[a-zA-Z0-9]', '***', target, flags=re.I)

在这个例子中,你分别使用了re.search,re.sub,re.S和re.I。后两者是常量,用于忽略换行符和大小写。
但是,如果你使用from re import search, sub, S, I来写代码,那么代码就会变成这样:

import research('c(.*?)x', flags=S)sub('[a-zA-Z0-9]', '***', target, flags=I)

看起来虽然简洁了,但是,一旦你的代码行数多了以后,你很容易忘记S和I这两个变量是什么东西。而且我们自己定义的函数,也很有可能取名为sub或者search,从而覆盖正则表达式模块下面的这两个同名函数。这就会导致很多难以觉察的潜在 bug。
再举一个例子。Python 的 datetime模块,我们可以直接import datetime,此时我们导入的是一个datetime模块,

输出为:class'module'

但是如果你写为from datetime import datetime,那么你导入的datetime是一个type类:

输出为:class'type'

因为这种方式导入的datetime,它就是Python 中的一种类型,用于表示包含日期和时间的数据。

这两种导入方式导入的datetime,虽然名字一样,但是他们的意义完全不一样,请大家观察下面两种写法:

import datetimenow = datetime.datetime.now()one_hour_ago = now - datetime.timedelta(hours=1)from datetime import datetime, timedeltanow = datetime.now()one_hour_ago = now - timedelta(hours=1)

第二种写法看似简单,但实则改动起来却更为麻烦。例如我还需要增加一个变量today用于记录今日的日期。

对于第一段代码,我们只需要增加一行即可:

today = datetime.date.today()

但对于第二行来说,我们需要首先修改导入部分的代码:

from datetime import datetime, timedelta, date
然后才能改代码:today = date.today()

这样一来你就要修改两个地方,反倒增加了负担。

第三方库

在使用某些第三方库的代码里面,我们会看到类似这样的写法:

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相关的数据。

动手试试

在使用某些第三方库的代码里面,我们会看到类似这样的写法:

 from lxml.html import fromstring selector = fromstring(HTML)

但是我们还可以写为:

from lxml import htmlselector = html.fromstring(HTML)

但是,下面这种写法会导致报错:

import lxmlselector = lxml.html.fromstring(HTML)

那么这里的lxml.html又是什么东西呢?
这种情况多常见于一些特别大型的第三方库中,这种库能处理多种类型的数据。例如lxml它既能处理xml的数据,又能处理html的数据,于是这种库会划分子模块,lxml.html模块专门负责html相关的数据。

自己来实现多种导入方法
我们现在自己来写代码,实现这多种导入方法。
我们创建一个文件夹DocParser,在里面分别创建两个文件main.py和util.py,他们的内容如下:

util.py文件:

def write():    print('write 函数被调用!')main.py文件:import utilutil.write()

现在我们把main.py的导入方式修改一下(结果与上面相同):

from util import writewrite()

现在,我们来创建一个文件夹microsoft,里面再添加一个文件parse.py:

from util import writewrite()

此时我们在 main.py中对它进行调用:

def read():    print('我是 microsoft 文件夹下面的 parse.py 中的 read函数')

我们也可以用另一种方法:

from microsoft import parseparse.read()

但是,你不能直接导入microsoft

import microsoft
microsoft.parse.read

无论你使用的是import xxx还是from xxx.yyy.zzz.www import qqq,你导入进来的东西,要不就是一个模块(对应到.py 文件的文件名),或者是某个.py 文件中的函数名、类名、变量名。

无论是import xxx还是from xxx import yyy,你导入进来的都不能是一个文件夹的名字。

可能有这样一种情况,就是某个函数名与文件的名字相同,例如:

在 microsoft文件夹里面有一个microsoft.py文件,这个文件里面有一个函数叫做microsoft,那么你的代码可以写为:

from microsoft import microsoft`
microsoft.microsoft()
但请注意分辨,这里你导入的还是模块,只不过microsoft.py文件名与它所在的文件夹名恰好相同而已。

以上是"Python中import与from import有什么区别"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

文件 函数 模块 代码 数据 写法 文件夹 处理 第三方 东西 两个 多种 方式 方法 正则 类型 表达式 相同 内容 变量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 湖北九亚互联网络科技有限公司 互联网是不是新科技 麻工互联网科技 居家互联网科技有限公司 科技大学互联网专业好不好 湖南诚度互联网科技有限公司 互联网科技产业特征 洛阳昕诺飞互联网科技有限公司 西安小鹰速贷互联网科技有限公司 浙南科技城互联网大厦招聘 互联网风格科技公司名称 互联网时代科技型公司的机会 互联网科技新闻 互联网界的黑科技 玉溪新华互联网科技怎么选 互联网科技和医药行业 深圳互联网科技园地址 黑龙江互联网科技公司 互联网科技创业计划的风险分析 互联网 卓越科技 有木互联网科技 广州优美互联网科技 互联网科技博主是什么意思 互联网教育科技公司vipkid 央行互联网金融科技公司 美国互联网科技实力 四川互联网展示科技馆设计 宇信科技在杭州互联网排第几 下一代互联网重大应用科技园
0