Python import与from import使用及区别详解

竹里
竹里
发布时间:2026-10-13 | 6人浏览过
原创

本文详细解析Python中import与from import两种模块导入方式的区别。通过random和sklearn实例说明语法差异,重点解释为何import sklearn后无法直接通过sklearn.datasets访问属性,揭示模块内部__init__.py配置对导入行为的影响,帮助开发者避免常见导入错误。

本文将深入探讨Python中import与from import的具体用法及其核心区别。

Python程序运行依赖于一组内建函数(如print()、input()和len()等)。此外,Python标准库提供了丰富的内置模块,每个模块本质上是一个包含相关函数的Python程序,可直接嵌入到用户代码中。例如,math模块提供数学运算函数,random模块提供随机数生成函数等。

一、import语句的基本使用

在调用模块中的函数前,必须首先通过import语句导入该模块。

其标准语法格式如下:

import module1[, module2[,... moduleN]]

具体示例如下:

1、调用random模块中的randint()函数:

# printRandom.py
import random
for i in range(5):
  print(random.randint(1, 10))
# result:

注意:由于randint()函数归属于random模块,因此在调用时必须加上random前缀,以明确告知Python解释器在random模块中查找该函数。

2、同时导入多个模块:

import math, sys, random, os

二、from import语句的高级用法

这是模块导入的另一种常见形式。使用from import语法时,调用模块内的函数无需添加moduleName前缀。然而,为了保持代码的可读性,通常建议使用标准的import语句形式。

其语法结构为:

from moduleName import name1[, name2[, ... nameN]]|*

具体示例如下:

导入random模块下的所有函数:

from random import *
for i in range(5):
  print(randint(1, 10)) # 这里就不需要random.前缀了

仅导入random模块下的randint和random函数:

from random import randint, random

接下来,我们将深入分析Python中import与from import的具体区别。

查阅相关资料后,发现这似乎是一个基础问题,网络上的普遍解释如下,这也是我之前的理解:

假设存在一个名为numpy的包,其中包含一个zeros函数。

1、使用from numpy import zeros

此时可以直接调用zeros()函数。

2、使用import numpy.zeros

此时必须使用全名numpy.zeros进行调用。

但在实际使用中,我遇到了意想不到的问题。

from sklearn import datasets
a=datasets.load_digits()
print(a)

这段代码运行正常:

然而,下面的代码却报错:

import sklearn
a=sklearn.datasets.load_digits()
print(a)

报错信息为:AttributeError: module 'sklearn' has no attribute 'datasets'

这令人困惑,通常认为执行import sklearn后,应该可以通过点号访问sklearn内的所有内容,就像在numpy中那样。作为初学者,我不明白原因,恳请高手解答,非常感谢!

尝试以下写法也会报错:

import sklearn.datasets
a=datasets.load_digits()
print(a)
NameError: name 'datasets' is not defined

总结

以上内容介绍了Python中import与from import的使用方法及区别,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。同时感谢大家对本站的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表