python中import和from import 的不同?

为什么一个可以一个不可,照理说importurllib之后下面要使用的话直接urllib.request就可以了为什么不行?... 为什么一个可以一个不可,照理说import urllib之后下面要使用的话直接urllib.request就可以了为什么不行? 展开
 我来答
上善渃鬼
2020-07-15 · TA获得超过199个赞
知道答主
回答量:177
采纳率:41%
帮助的人:31万
展开全部
一、import和from import的区别:

import 只能导入模块、子包、包, 而不能导入模块中的类、函数、变量等
from import 可以导入模块、子包、包、类、函数、变量以及在包的__init__.py中已经导入的名字
ps: 但是两者都可以用as给导入的名字重命名

二、包导入的注意事项

不能在导入的路径中使用已经导入过的名字, 比如 import numpy as np; import np.random as rn, 这会报错, 说没有找到名字叫np的model, 这其实就说明python寻找包路径的时候, 是在文件系统中寻找, 而不包含当前命名空间中的名字, 即与当前的程序执行环境没有关系的
导入一个包时, 则这个包可用的属性都必须在__init__.py文件中定义, 这就是说如果一个包的__init__.py文件是空的, 则即使包里边有几个模块文件, 也无法通过这个包名去使用, 比如pkg下有a.py和b.py两个文件, 但是__init__.py中没有导入模块a和b,则import pkg as pg 后, 无法使用pg.a和pg.b,这个说明包内的模块和子包不会自动加入到包的名字空间里边, 需要手动通过__init__.py指定后才会加入。这一点上模块和包不太一样, 模块中的符号是自动导入的,因此可以直接通过模块名来调用
第2点只是说无法通过pg这个名字来使用模块a和b, 但是我们可以手动导入a和b的, 用import pkg.a as a和from pkgs import a as a都是可以的
导入一个长串的路径时, 则这个路径上的所有包的__init__.py都会被执行, 并且包的对应子包也会被加入到包的属性中去, 比如我们现在有这样一个包结构: pkgs下有两个子包pkga和pkgb, 且pkgs/init.py是空文件,则import pkgs语句是无法使用pkgs.pkga这样的句子的, 但是如果我们后续又使用了一个import语句: import pkgs.pkga.a as a,则此时pkgs的名字空间里会加入pkga这个属性,也就是可以使用pkgs.pkga了
ps: from pkgs.pkga.a import fun_a这种长路径形式, 虽然会执行pkgs和pkga的__init__.py以及模块a的代码,
阳光的雷咩咩
2020-06-12 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7662万
展开全部
报错截图一下?
更多追问追答
追问

追答

我测试了没问题啊


更新:

你试试这句输出什么内容:

print(urllib.__dict__['__file__'])

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式