tem*_*ame 18 python import difference
在Python中,我不太清楚以下两行代码之间的区别:
import X
Run Code Online (Sandbox Code Playgroud)
要么
from X import *
Run Code Online (Sandbox Code Playgroud)
难道他们都不是从模块X导入所有内容吗?有什么不同?
Bre*_*arn 45
之后import x,你可以参考x类似的东西x.something.之后from x import *,您可以x直接引用事物something.由于第二种形式将名称直接导入本地名称空间,因此如果从多个模块导入内容,则会产生冲突的可能性.因此,from x import *气馁.
你也可以这样做from x import something,它只导入something到本地命名空间,而不是一切x.这样做更好,因为如果列出导入的名称,就可以确切地知道要导入的内容,并且更容易避免名称冲突.
Ash*_*ary 12
import X:这一切进口的X.var1,X.var2等
from X import *:这个进口寄托都如var1,var2等,也就是说,它充斥本地命名空间
看到两个电话后的差异:
>>> 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>}
Run Code Online (Sandbox Code Playgroud)
import X
Run Code Online (Sandbox Code Playgroud)
在引用模块对象的本地名称空间中创建标签.
from X import *
Run Code Online (Sandbox Code Playgroud)
X直接在本地名称空间中为模块的每个成员属性创建标签.
两个操作都添加X为sys.modulestrue,但是对本地命名空间的影响是不同的.
| 归档时间: |
|
| 查看次数: |
21409 次 |
| 最近记录: |