Python import与from import使用及区别详解
本文详细解析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的使用方法及区别,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。同时感谢大家对本站的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













