我想知道代码片段之间是否有任何区别
from urllib import request
这个片段
import urllib.request
或者它们是否可以互换。如果它们是可互换的,那么哪种是“标准”/“首选”语法(如果有的话)?
我想知道代码片段之间是否有任何区别
from urllib import request
这个片段
import urllib.request
或者它们是否可以互换。如果它们是可互换的,那么哪种是“标准”/“首选”语法(如果有的话)?
当前回答
你在包中使用的是Python3 urllib。两种形式都是可以接受的,没有一种形式的导入优于另一种。有时,当涉及多个包目录时,您可以从x.y.z.a导入使用前者
在这个urllib包的特殊情况下,第二种方法导入urllib。请求和使用urllib。请求是标准库统一使用它的方式。
其他回答
这取决于您在引用导入时希望如何访问它。
from urllib import request
# access request directly.
mine = request()
import urllib.request
# used as urllib.request
mine = urllib.request()
当你为了简单或避免屏蔽内置而导入时,你也可以自己给东西起别名:
from os import open as open_
# lets you use os.open without destroying the
# built in open() which returns file handles.
你在包中使用的是Python3 urllib。两种形式都是可以接受的,没有一种形式的导入优于另一种。有时,当涉及多个包目录时,您可以从x.y.z.a导入使用前者
在这个urllib包的特殊情况下,第二种方法导入urllib。请求和使用urllib。请求是标准库统一使用它的方式。
这是有区别的。在某些情况下,其中一种可行,另一种行不通。这里有一个例子:假设我们有以下结构:
foo.py
mylib\
a.py
b.py
现在,我想把b.py导入a.py。我想把a。py导入到foo。我怎么做呢?两句话,在I中写道:
import b
在foo.py中我写道:
import mylib.a
当试图运行foo.py时,这将生成一个ImportError。解释器会抱怨a.py (import b)中的import语句说没有模块b。那么如何解决这个问题呢?在这种情况下,更改a中的import语句来导入mylib.b 将不会工作,因为a和b都在mylib中。这里的解决方案(或至少一个解决方案)是使用绝对导入:
from mylib import b
import a module用于导入一个模块
在python中2。至少你不能导入urllib2。urlopen
你必须从urllib2导入urlopen
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib2.urlopen
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named urlopen
>>> import urllib.request
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named request
>>>
我对import urllib的主要不满。请求是你仍然可以引用urllib。即使没有导入也要解析。
>>> import urllib3.request
>>> urllib3.logging
<module 'logging' from '/usr/lib/python2.7/logging/__init__.pyc'>
urllib3下也有我的请求。Python 2.7.4 ubuntu