首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"import X“和"from X import *”的区别?

"import X“和"from X import *”的区别?
EN

Stack Overflow用户
提问于 2012-09-05 04:33:09
回答 7查看 34.3K关注 0票数 20

在Python中,我不太清楚以下两行代码之间的区别:

代码语言:javascript
复制
import X

代码语言:javascript
复制
from X import *

它们不都只是从模块X导入所有内容吗?有什么关系呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-09-05 04:35:23

import x之后,你可以在x中引用像x.something这样的东西。在from x import *之后,您可以将x中的内容直接引用为something。因为第二种形式将名称直接导入到本地名称空间中,所以如果从许多模块中导入内容,则可能会产生冲突。因此,不鼓励使用from x import *

您还可以执行from x import something,它只将something导入到本地名称空间,而不是x中的所有内容。这样更好,因为如果您列出了导入的名称,您就可以确切地知道要导入的是什么,并且更容易避免名称冲突。

票数 53
EN

Stack Overflow用户

发布于 2012-09-05 04:35:21

import X:这会将所有内容导入为X.var1X.var2

from X import *:这会导入var1var2等所有内容,即泛洪本地名称空间

查看两次调用后的差异:

代码语言:javascript
复制
>>> import math
>>> len(globals())  
5                          #no of variables in namespace
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'math': <module 'math' from '/usr/local/lib/python2.7/lib-dynload/math.so'>, '__package__': None}
>>> 
>>>
>>> from math import *
>>> len(globals())
47                     #no of variables in namespace
>>> globals()
{'pow': <built-in function pow>, 'fsum': <built-in function fsum>, 'cosh': <built-in function cosh>, 'ldexp': <built-in function ldexp>, 'hypot': <built-in function hypot>, 'acosh': <built-in function acosh>, 'tan': <built-in function tan>, 'asin': <built-in function asin>, 'isnan': <built-in function isnan>, 'log': <built-in function log>, 'fabs': <built-in function fabs>, 'floor': <built-in function floor>, 'atanh': <built-in function atanh>, 'sqrt': <built-in function sqrt>, '__package__': None, 'frexp': <built-in function frexp>, 'factorial': <built-in function factorial>, 'degrees': <built-in function degrees>, 'pi': 3.141592653589793, 'log10': <built-in function log10>, '__doc__': None, 'math': <module 'math' from '/usr/local/lib/python2.7/lib-dynload/math.so'>, 'asinh': <built-in function asinh>, 'fmod': <built-in function fmod>, 'atan': <built-in function atan>, '__builtins__': <module '__builtin__' (built-in)>, 'copysign': <built-in function copysign>, 'cos': <built-in function cos>, 'ceil': <built-in function ceil>, 'atan2': <built-in function atan2>, 'isinf': <built-in function isinf>, 'sinh': <built-in function sinh>, '__name__': '__main__', 'trunc': <built-in function trunc>, 'expm1': <built-in function expm1>, 'e': 2.718281828459045, 'tanh': <built-in function tanh>, 'radians': <built-in function radians>, 'sin': <built-in function sin>, 'lgamma': <built-in function lgamma>, 'erf': <built-in function erf>, 'erfc': <built-in function erfc>, 'modf': <built-in function modf>, 'exp': <built-in function exp>, 'acos': <built-in function acos>, 'log1p': <built-in function log1p>, 'gamma': <built-in function gamma>}
票数 14
EN

Stack Overflow用户

发布于 2012-09-05 04:34:49

代码语言:javascript
复制
import X

在引用模块对象的本地命名空间中创建标签。

代码语言:javascript
复制
from X import *

直接在本地命名空间中为X模块的每个成员属性创建一个标签。

这两个操作都会将X添加到sys.modules,但对本地名称空间的影响是不同的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12270954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档